Swing程序中关于监听器代码的简化

来源:互联网 发布:谷得网络这家公司怎样 编辑:程序博客网 时间:2024/05/15 23:45
        第一种方式就是使用匿名的内部类,这样可以使得代码结构非常紧凑。比如在一个JPanel上有3个按钮,每个按钮都能改变该panel的背景颜色。由于是3个按钮,因此我们可以把创建按钮的代码写成一个函数来重复调用,并且使用内部匿名类来实现监听器,这样可有效减少代码长度。例子如下:
public class ButtonClickPanel extends JPanel {

    
public ButtonClickPanel() {
        add(createButton(
"Red", Color.RED));
        add(createButton(
"Blue", Color.BLUE));
        add(createButton(
"Yellow", Color.YELLOW));
    }

    
    
private JButton createButton(String name, final Color c) {
        JButton b 
= new JButton(name);
        b.addActionListener(
new
                ActionListener()
        
{
            @Override
            
public void actionPerformed(ActionEvent e) {
                
// TODO Auto-generated method stub
                setBackground(c);
            }

        }
);
        
return b;
    }

}


       另外一种方法更为简洁,直接使用一个函数生成监听器,而根本不需要自己定义。但是这种方法有一定的局限性,不是很通用。他要求:
       1.在监听器内使用的函数不能有参数
       2.若监听器内的函数一定需要一个参数,那么这个参数必须可以通过“产生监听事件的组件”的get方法获得。
       上述第二点从字面上不是很好理解,我再具体说说。比如我们上面的功能,改变背景色,这一功能就不符合上述两点。首先他需要一个颜色参数,不符合第1点,其次,这个颜色参数不能通过按钮(也就是产生监听事件的组件)的get方法获得,因此也不满足第2点。所以,上述功能不能使用这种方式简化代码。
        下面我们把功能修改一下,点击按钮,将外围框架的标题修改为按钮的名字。这一功能就符合上述第2点,因为将标题修改为按钮的名字,而按钮的名字可以通过按钮的getText()方法来获得。代码如下:
public class ButtonClickPanel extends JPanel {

    
public ButtonClickPanel(JFrame jf) {
        frame 
= jf;
        add(createButton(
"Red"));
        add(createButton(
"Blue"));
        add(createButton(
"Yellow"));
    }

    
    
private JButton createButton(String name) {
        JButton b 
= new JButton(name);
        b.addActionListener(EventHandler.create(ActionListener.
class, frame, "setTitle""source.text"));
        
return b;
    }

    
    
private JFrame frame;
}
原创粉丝点击