Swing开发用户界面时不同事件处理方法优劣对比

2014-07-16 22:16:38|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:Java, 界面设计, Swing|来源:唯设编程网

在程序入口main方法中,首先新建Simple1组件,通过构造器建立用户GUI,定义一个面板Jpanle,,增加两个按钮,然后利用 JButton.addActionListerner将两个按钮加入到一个活动监听器SimpleLister中,最后,两个按钮添加到面板。当GUI 建立后,我们将面板添加到窗体并显示结果。当用户点击按钮时,程序调用actionPerformed方法,通过if语句来判断是哪一个按钮被点击,然后 在对话框中显示相应的内容。

利用一个监听器来处理事件的缺点是,当程序比较复杂时,需要一大串的if 语句来实现,程序代码较难阅读与维护。当然,如果处理的事件较少,这种方式比较简单。

2.匿名内部类

通过使用匿名内部类可以解决上述存在的问题。使用简单的匿名内部类作为addActionListener的变量即可。以下是实现代码:

/*
* Simple2.java - 处理事件的第二种方法
*    在这个例子中,利用匿名内部类来监听每一个事件源产生的事件
*    避免使用一些if语句来决定是哪个事件源
*/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Simple2
{
    private static JFrame frame;   // 定义为静态变量以便main使用
    private static JPanel myPanel; // 该面板用来放置按钮组件
    private JButton button1;       // 这里定义按钮组件    
    private JButton button2;       // 以便让ActionListener使用
    
    public Simple2()               // 构造器, 建立图形界面
     {
        // 新建面板
        myPanel = new JPanel();
        // 新建按钮
        button1 = new JButton("按钮1");  // 新建按钮1
        button2 = new JButton("按钮2");

        // 每一个事件源需要一个监听器
        // 定义一个匿名内部类来监听事件源产生的事件
        button1.addActionListener(
            new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    JOptionPane.showMessageDialog(frame,
                                           "按钮1 被点击");
                }
            }
        );
        button2.addActionListener(
            new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    JOptionPane.showMessageDialog(frame,
                                            "按钮2 被点击");
                }
            }
        );

        myPanel.add(button1);        // 添加按钮到面板
        myPanel.add(button2);
    }
    public static void main(String s[])
    {
        Simple2 gui = new Simple2(); // 新建Simple2组件
        
        frame = new JFrame("Simple2");  // 新建JFrame
        // 处理关闭事件的通常方法
        frame.addWindowListener(new WindowAdapter() {
             public void windowClosing(WindowEvent e)
              {System.exit(0);} });
        frame.getContentPane().add(myPanel);
        frame.pack();                  
        frame.setVisible(true);
    }
}
发表评论0条 】
网友评论(共?条评论)..
Swing开发用户界面时不同事件处理方法优劣对比