在用户注册网站时,除了用户名、密码必须填写外,还可以增加一些其他信息让用户选填。通常为了节约空间可以将选填项隐藏,如果用户想填写再显示。本实例在一个框架中实现了这个效果。实例运行效果如图


1.JPG

按钮是图形用户界面中最常见也是最简单的控件之一。在使用按钮时可以为其增加图片、设置快捷键等。为了让按钮对用户操作产生响应,通常对其增加动作监听。ActionListener是一个监听器接口,它定义了一个名为actionPerformed()的方法,用来实现对用户单击按钮的响应。该方法的声明如下:

void actionPerformed(ActionEvent e)

参数说明

e:动作事件对象。

技巧:对于基本的Swing控件,如单选按钮、组合框等都可以监听其动作事件并做出响应。

1)编写MoreChoices类,该类继承了JFrame。在框架中增加一个按钮“显示成功秘籍”。

2)本实例一共实现了两个动作监听器对象,即moreless,由于其代码相似,取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;
}


技巧:在事件监听器中使用匿名内部类可以让代码更加简洁。

心法领悟:隐藏控件的应用。

为了简单起见,本实例仅隐藏了一个标签。读者可以在本实例的基础上进行增强,如隐藏复选框、单选按钮、文本域等控件。而且只要修改边框布局的定位,就能调整隐藏控件显示的位置,如在上方显示、左方显示等。读者可以根据自己的需求进行调整。