在用户注册网站时,除了用户名、密码必须填写外,还可以增加一些其他信息让用户选填。通常为了节约空间可以将选填项隐藏,如果用户想填写再显示。本实例在一个框架中实现了这个效果。实例运行效果如图
按钮是图形用户界面中最常见也是最简单的控件之一。在使用按钮时可以为其增加图片、设置快捷键等。为了让按钮对用户操作产生响应,通常对其增加动作监听。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;
}
技巧:在事件监听器中使用匿名内部类可以让代码更加简洁。
心法领悟:隐藏控件的应用。 为了简单起见,本实例仅隐藏了一个标签。读者可以在本实例的基础上进行增强,如隐藏复选框、单选按钮、文本域等控件。而且只要修改边框布局的定位,就能调整隐藏控件显示的位置,如在上方显示、左方显示等。读者可以根据自己的需求进行调整。