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

        第一种方式就是使用匿名的内部类,这样可以使得代码结构非常紧凑。比如在一个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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值