Swing程序中关于监听器代码的简化
来源:互联网 发布:谷得网络这家公司怎样 编辑:程序博客网 时间:2024/05/15 23:45
第一种方式就是使用匿名的内部类,这样可以使得代码结构非常紧凑。比如在一个JPanel上有3个按钮,每个按钮都能改变该panel的背景颜色。由于是3个按钮,因此我们可以把创建按钮的代码写成一个函数来重复调用,并且使用内部匿名类来实现监听器,这样可有效减少代码长度。例子如下:
另外一种方法更为简洁,直接使用一个函数生成监听器,而根本不需要自己定义。但是这种方法有一定的局限性,不是很通用。他要求:
1.在监听器内使用的函数不能有参数
2.若监听器内的函数一定需要一个参数,那么这个参数必须可以通过“产生监听事件的组件”的get方法获得。
上述第二点从字面上不是很好理解,我再具体说说。比如我们上面的功能,改变背景色,这一功能就不符合上述两点。首先他需要一个颜色参数,不符合第1点,其次,这个颜色参数不能通过按钮(也就是产生监听事件的组件)的get方法获得,因此也不满足第2点。所以,上述功能不能使用这种方式简化代码。
下面我们把功能修改一下,点击按钮,将外围框架的标题修改为按钮的名字。这一功能就符合上述第2点,因为将标题修改为按钮的名字,而按钮的名字可以通过按钮的getText()方法来获得。代码如下:
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;
}
}
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;
}
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;
}
- Swing程序中关于监听器代码的简化
- 关于JAVA SWING程序的发布
- 关于新手在控件中设置监听器程序停止运行的错误
- java swing中刷新界面的代码
- Swing中显示图片的简单代码
- Swing中关于JFileChooser的一些问题
- Swing:重置按钮的监听器实现
- Swing所支持的事件监听器
- qt 代码中简化槽的代码量
- java 程序的简化
- typedef的代码简化
- 关于监听器的用法
- 关于目标的简化
- jquery中使用javascript的with简化代码的写法
- 如何简化php模板页面中分页代码的解析
- 关于Java中TCP/IPMonitor监听器无响应的心得
- 关于Swing的Model
- 关于swing的事件
- 预出售IT类CN域名一个,万网注册的!
- FlashGet 快车 简体中文版 1.90 2007.06.29
- 不能切换设计视图问题
- WebLogic81环境下解决GBK问题
- 搞了3个多月,还是没有赚到钱,股市真难。。。。
- Swing程序中关于监听器代码的简化
- 行为型模式-观察者模式(Observer)
- 一种有意思的作图速算法
- Ubuntu的使用经验-持续更新中
- 行为型模式-模板方法模式(Template Method)
- 企业信息化中的“标准”、“行业”和“个性”
- [旧作] 科普还需要普什么?
- AJAX技术之初体验
- 用xmanager连接Linux的配置步骤