【JAVA语言程序设计基础篇】--事件驱动程序设计--定义监听器的另一种方式
2016-08-15 16:20
609 查看
有很多种方式定义监听类,哪种方式比较好呢?
使用内部类或者匿名内部类定义监听类已经成了事件处理程序设计的标准。
因为他通常都能提供清晰、干净和简洁的代码。
使用内部类或者匿名内部类定义监听类已经成了事件处理程序设计的标准。
因为他通常都能提供清晰、干净和简洁的代码。
package chapter16; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; @SuppressWarnings("serial") public class DetectSourceDemo extends JFrame{ private JButton sNew = new JButton ("Process New"); private JButton sOpen = new JButton ("Process Open"); private JButton sSave = new JButton ("Process Save"); private JButton sPrint = new JButton ("Process Print"); public DetectSourceDemo(){ setLayout(new FlowLayout()); add(sNew); add(sOpen); add(sSave); add(sPrint); sNew.addActionListener(new ButtonListener()); sOpen.addActionListener(new ButtonListener()); sSave.addActionListener(new ButtonListener()); sPrint.addActionListener(new ButtonListener()); } public static void main(String[] args) { JFrame frame = new DetectSourceDemo(); frame.setTitle("Test"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.pack(); frame.setVisible(true); } class ButtonListener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { if(e.getSource()==sNew){ System.out.println("new"); } else if(e.getSource()==sOpen){ System.out.println("open"); } else if(e.getSource()==sSave){ System.out.println("save"); } else { System.out.println("print"); } } } }
/** * 这种方法不是很好,因为将太多的责任放在了一个类中,最好能设计一个监听类 ,只负责处理事件,这种设计会让代码易于阅读和维护 */ package chapter16; import javax.swing.*; import java.awt.event.*; @SuppressWarnings("serial") public class FrameAsListenerDemo extends JFrame implements ActionListener { // Create four buttons private JButton jbtNew = new JButton("New"); private JButton jbtOpen = new JButton("Open"); private JButton jbtSave = new JButton("Save"); private JButton jbtPrint = new JButton("Print"); public FrameAsListenerDemo() { // Create a panel to hold buttons JPanel panel = new JPanel(); panel.add(jbtNew); panel.add(jbtOpen); panel.add(jbtSave); panel.add(jbtPrint); add(panel); // Register listener with buttons jbtNew.addActionListener(this); jbtOpen.addActionListener(this); jbtSave.addActionListener(this); jbtPrint.addActionListener(this); } /** Implement actionPerformed */ public void actionPerformed(ActionEvent e) { if (e.getSource() == jbtNew) System.out.println("Process New"); else if (e.getSource() == jbtOpen) System.out.println("Process Open"); else if (e.getSource() == jbtSave) System.out.println("Process Save"); else if (e.getSource() == jbtPrint) System.out.println("Process Print"); } /** Main method */ public static void main(String[] args) { JFrame frame = new FrameAsListenerDemo(); frame.setTitle("FrameAsListenerDemo"); frame.setLocationRelativeTo(null); // Center the frame frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } }
相关文章推荐
- eclipse启动项目非常慢
- list,set练习和Map简述
- java实现快速排序
- mybaties 一对多和多对一
- jar包对不同JDK版本的兼容性问题:Unsupported major.minor version 52.0
- Java类加载机制解析
- 页面web 导出excle表格 模版另存为类型方法 数据导出
- java持续部署脚本
- 黄阶低级 - 《 Java 核心》- 3.7 输入输出 - 修改0次
- classpath指的是路径是哪里
- Zookeeper
- 导入Maven项目后,Eclipse提示“Missing artifact ”类的错误
- Java NIO 之 ServerSocketChannel
- 华为OJ——iNOC产品部--完全数计算
- Java 集合框架源码分析(五)——Vector
- MyBatis学习笔记(三)——parameterType为基本类型时的使用方法
- MyEclipse2014的体验增强-格式模板
- 观察者模式简单例子
- jee、spring、spring mvc、mybatis 学习(六)
- 降低Java垃圾回收开销的5条建议