我的java学习之事件监听篇01

 1 import javax.swing.*;
 2 import java.awt.*;
 3 import java.awt.event.*;
 4 import java.io.*;
 5 
 6 public class ImageViewerDemo
 7 {
 8     public static void main(String [] args) {
 9         JFrame frame = new ImageViewerFrame();
10         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
11         frame.setVisible(true);
12     }
13 }
14 
15 class ImageViewerFrame extends JFrame
16 {
17     public ImageViewerFrame() {
18         this.setTitle("ImageViewer Frame");
19         this.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
20 
21         // 创建组件  
22         JMenuBar menuBar = new JMenuBar();
23         this.setJMenuBar(menuBar); //注意若直接加载会占整个窗体
24 
25         JMenu menu = new JMenu("File");
26         menuBar.add(menu);
27 
28         JMenuItem menuOpen = new JMenuItem("open"); //菜单分栏
29         menu.add(menuOpen);
30 
31         //设置文件选择器默认目录为当前
32         chooser = new JFileChooser();
33         chooser.setCurrentDirectory(new File(".")); 
34         
35         // label标签用于显示图片文件信息
36         label = new JLabel();
37         this.add(label);
38 
39         // 添加事件 文件选择事件
40         menuOpen.addActionListener( new ActionListener() 
41             {
42                 public void actionPerformed(ActionEvent e) {
43                     //参见API示例用法
44                     int returnVal = chooser.showOpenDialog(null);
45 
46                     //如果选中文件 则以图片形式选中
47                     if(returnVal == JFileChooser.APPROVE_OPTION) {
48                         String name = chooser.getSelectedFile().getPath();
49                         label.setIcon(new ImageIcon(name));
50                     }
51                 }
52             }
53             
54         );
55 
56         JMenuItem menuExit = new JMenuItem("exit");
57         menu.add(menuExit);
58         menuExit.addActionListener( new ActionListener()
59             {
60                 public void actionPerformed(ActionEvent e) {
61                     System.exit(0);
62                 }
63             }
64         );
65     }
66 
67     private JLabel label;    
68     private JFileChooser chooser;
69     private static final int DEFAULT_WIDTH = 300; //设置默认宽度
70     private static final int DEFAULT_HEIGHT = 400; 
71 }

这是ImageViewer 参见core in java 卷一第二节 用于阅读看图的小程序

 

在代码里 用菜单条用的是 setlMenuBar(menuBar); 而不是直接add() 

给菜单项添加事件监听时候使用匿名内部类处理

         直接写处理情况

         Xx.addXXListener( new XXAction() {} );

         接口的具体实现就搁这里头写着 同时匿名内部类访问的变量为成员变量(局部变量为final)

         事件源对象. 方法(监听器 )   =>  意思是 某组件调用某组件的监听方法

 如 按钮调用按钮的监听方法addActionListener() 那里头咋写呢,写某对象呗,对象有啥特征呢,啥都往里头写有啥用呢, 监听呗,得具有监听器的特征,

那我哪知道那个对象有监听器的特征,OK, 不用找,java给你接听器的接口你去是实现就是,他给你这一套,你按他的来,错不了,就这样。。。

         提前做好预备工作,当某件事情发生做出相应的处理, 搁java里叫适配器模式

         事发生了,做处理的人咋知道呢,呵呵告诉他呗,没那主动,得你监听,有事你才知道。。。注册事件

   

posted on 2016-03-23 21:50  jiayouhgl  阅读(191)  评论(0)    收藏  举报

导航