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

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

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

使用匿名内部类同样存在许多另外的问题。首先,根据组件在代码中被定义的不同位置,类的定义以及处理事件的代码将分散在程序的各个部分,不是集中 在一块,同样不便于阅读与维护。各事件的处理全部由嵌套的程序块组成,视觉上很难定位程序代码。如果事件处理程序比较复杂,内部类中的代码将变得很长,你 将找不到相应的组件定义位置。最后,当工具栏、菜单栏目等需要处理同样的用户行为时,该方法将使代码更难维护。

3.一般内部类

我们使用一般的命名内部类可以解决以上许多问题。所有的事件处理方法都集中在一块,并且都具有有意义的名称,程序非常容易阅读与维护。单个的事件处理程序也可以被工具栏、菜单栏等重复使用。

以下是实现代码:

/*
* Simple3.java - 处理事件的第三种方法
*    For this example, we will use inner member classes to
*    在这个例子中,利用一般内部类来监听每个事件源产生的事件
*    该方法避免了第二种方法中由于使用匿名内部类而导致的代码混乱
*    便于集中处理事件代码
*    每一个Hander可以被工具栏或菜单多次使用
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Simple3
{
    private static JFrame frame;   // 定义为静态变量以便main使用
    private static JPanel myPanel; // 该面板用来放置按钮组件
    private JButton button1;       // 这里定义按钮组件    
    private JButton button2;       // 以便让ActionListener使用
        
    // 利用一般内部类来监听每一个事件源产生的事件如(button1, button2)
    private class Button1Handler implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            JOptionPane.showMessageDialog(frame,
                                         "按钮1 被点击");
        }
    }
    
    private class Button2Handler implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            JOptionPane.showMessageDialog(frame,
                                         "按钮2 被点击");
        }
    }
    
    public Simple3()                //  // 构造器, 建立图形界面
    {
         // 新建面板
        myPanel = new JPanel();
        // 新建按钮
        button1 = new JButton("按钮1");  // 新建按钮1
        button2 = new JButton("按钮2");

        // 对每一个组件注册监听内部类
        button1.addActionListener(new Button1Handler());
        button2.addActionListener(new Button2Handler());
        myPanel.add(button1);        // 添加按钮到面板
        myPanel.add(button2);
    }

    public static void main(String s[])
    {
        Simple3 gui = new Simple3();  // 新建Simple3组件
        frame = new JFrame("Simple3");  // 新建JFrame
        // 处理关闭事件的通常方法        
        frame.addWindowListener(new WindowAdapter() {
             public void windowClosing(WindowEvent e)
              {System.exit(0);} });

        frame.getContentPane().add(myPanel);
        frame.pack();                   
        frame.setVisible(true);
    }
}

以上分析了在Java Swing中三种事件的处理方式,其中利用一般内部类来实现的方法,从代码书写、阅读、维护以及程序的可扩展性角度来看,最为值得推荐供大家使用。

<123>
发表评论0条 】
网友评论(共?条评论)..
Swing开发用户界面时不同事件处理方法优劣对比