更多选项的框架容器
在用户注册网站时,除了用户名、密码必须填写外,还可以增加一些其他信息让用户选填。通常为了节约空间可以将选填项隐藏,如果用户想填写再显示。本实例在一个框架中实现了这个效果。实例运行效果如图所示。
按钮是图形用户界面中最常见也是最简单的控件之一。在使用按钮时可以为其增加图片、设置快捷键等。为了让按钮对用户操作产生响应,通常对其增加动作监听。ActionListener是一个监听器接口,它定义了一个名为actionPerformed()的方法,用来实现对用户单击按钮的响应。该方法的声明如下:
void actionPerformed(ActionEvent e)
参数说明
e:动作事件对象。
技巧:对于基本的Swing控件,如单选按钮、组合框等都可以监听其动作事件并做出响应。
(1)编写MoreChoices类,该类继承了JFrame。在框架中增加一个按钮“显示成功秘籍”。
(2)本实例一共实现了两个动作监听器对象,即more和less,由于其代码相似,取more进行讲解。该监听器实现了在内容窗格上增加面板控件hiddenPanel、修改按钮的文本信息、删除按钮上more的监听器并增加按钮上less的监听器的功能。代码如下:
package com.mingrisoft.jframe; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.UIManager; public class MoreChoices extends JFrame { /** * */ private static final long serialVersionUID = -3130941572848968305L; private JPanel contentPane; private JPanel hiddenPanel = new JPanel(); /** * Launch the application. */ public static void main(String[] args) { try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); } catch (Throwable e) { e.printStackTrace(); } EventQueue.invokeLater(new Runnable() { public void run() { try { MoreChoices frame = new MoreChoices(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public MoreChoices() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 138, 86); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); contentPane.setLayout(new BorderLayout(0, 0)); setContentPane(contentPane); JPanel panel = new JPanel(); contentPane.add(panel, BorderLayout.NORTH); button = new JButton("\u663E\u793A\u6210\u529F\u79D8\u7C4D"); button.addActionListener(more); panel.add(button); Dimension panelDimension = new Dimension(button.getPreferredSize().width, button.getPreferredSize().height + 10); panel.setPreferredSize(panelDimension); JLabel label = new JLabel("Java编程词典"); hiddenPanel.add(label); hiddenPanel.setBorder(BorderFactory.createEtchedBorder()); } ActionListener more = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { getContentPane().add(hiddenPanel); pack(); button.setText("隐藏成功秘籍"); button.removeActionListener(more); button.addActionListener(less); } }; ActionListener less = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { remove(hiddenPanel); pack(); button.setText("显示成功秘籍"); button.removeActionListener(less); button.addActionListener(more); } }; private JButton button; }
技巧:在事件监听器中使用匿名内部类可以让代码更加简洁。
心法领悟:隐藏控件的应用。
为了简单起见,本实例仅隐藏了一个标签。读者可以在本实例的基础上进行增强,如隐藏复选框、单选按钮、文本域等控件。而且只要修改边框布局的定位,就能调整隐藏控件显示的位置,如在上方显示、左方显示等。读者可以根据自己的需求进行调整。