控制台程序。

定义事件监听器的类必须实现监听器接口。所有的事件监听器接口都扩展了java.util.EventListener接口。这个接口没有声明任何方法,仅仅用于表示监听器对象。使用EventListener类型的变量可以保存任意事件监听器对象的引用。

要为特定的事件类型实现监听器,只需要实现对应接口中的方法即可。让应用程序类成为窗口事件的监听器,就可以处理SketcherFrame窗口的一些窗口事件。接下来必须创建Sketcher对象,作为事件的监听器。

 1 // Main window for the Sketcher application
 2 import javax.swing.*;
 3 import static java.awt.event.InputEvent.*;                             // For modifier constants
 4
 5 @SuppressWarnings("serial")
 6 public class SketcherFrame extends JFrame {
 7   // Constructor
 8   public SketcherFrame(String title) {
 9     setTitle(title);                                                   // Set the window title
10     setDefaultCloseOperation(EXIT_ON_CLOSE);
11
12     setJMenuBar(menuBar);                                              // Add the menu bar to the window
13
14     JMenu fileMenu = new JMenu("File");                                // Create File menu
15     JMenu elementMenu = new JMenu("Elements");                         // Create Elements menu
16     fileMenu.setMnemonic('F');                                         // Create shortcut
17     elementMenu.setMnemonic('E');                                      // Create shortcut
18
19     // Construct the file drop-down menu
20     newItem = fileMenu.add("New");                                     // Add New item
21     openItem = fileMenu.add("Open");                                   // Add Open item
22     closeItem = fileMenu.add("Close");                                 // Add Close item
23     fileMenu.addSeparator();                                           // Add separator
24     saveItem = fileMenu.add("Save");                                   // Add Save item
25     saveAsItem = fileMenu.add("Save As...");                           // Add Save As item
26     fileMenu.addSeparator();                                           // Add separator
27     printItem = fileMenu.add("Print");                                 // Add Print item
28
29     // Add File menu accelerators
30     newItem.setAccelerator(KeyStroke.getKeyStroke('N',CTRL_DOWN_MASK ));
31     openItem.setAccelerator(KeyStroke.getKeyStroke('O', CTRL_DOWN_MASK));
32     saveItem.setAccelerator(KeyStroke.getKeyStroke('S', CTRL_DOWN_MASK));
33     printItem.setAccelerator(KeyStroke.getKeyStroke('P', CTRL_DOWN_MASK));
34
35     // Construct the Element drop-down menu
36     elementMenu.add(lineItem = new JRadioButtonMenuItem("Line", true));
37     elementMenu.add(rectangleItem = new JRadioButtonMenuItem("Rectangle", false));
38     elementMenu.add(circleItem = new JRadioButtonMenuItem("Circle", false));
39     elementMenu.add(curveItem = new JRadioButtonMenuItem("Curve", false));
40     ButtonGroup types = new ButtonGroup();
41     types.add(lineItem);
42     types.add(rectangleItem);
43     types.add(circleItem);
44     types.add(curveItem);
45
46     // Add element type accelerators
47     lineItem.setAccelerator(KeyStroke.getKeyStroke('L', CTRL_DOWN_MASK));
48     rectangleItem.setAccelerator(KeyStroke.getKeyStroke('E', CTRL_DOWN_MASK));
49     circleItem.setAccelerator(KeyStroke.getKeyStroke('I', CTRL_DOWN_MASK));
50     curveItem.setAccelerator(KeyStroke.getKeyStroke('V', CTRL_DOWN_MASK));
51
52     elementMenu.addSeparator();
53     JMenu colorMenu = new JMenu("Color");                              // Color submenu
54     elementMenu.add(colorMenu);                                        // Add the submenu
55     colorMenu.add(redItem = new JCheckBoxMenuItem("Red", false));
56     colorMenu.add(yellowItem = new JCheckBoxMenuItem("Yellow", false));
57     colorMenu.add(greenItem = new JCheckBoxMenuItem("Green", false));
58     colorMenu.add(blueItem = new JCheckBoxMenuItem("Blue", true));
59
60     // Add element color accelerators
61     redItem.setAccelerator(KeyStroke.getKeyStroke('R', CTRL_DOWN_MASK));
62     yellowItem.setAccelerator(KeyStroke.getKeyStroke('Y', CTRL_DOWN_MASK));
63     greenItem.setAccelerator(KeyStroke.getKeyStroke('G', CTRL_DOWN_MASK));
64     blueItem.setAccelerator(KeyStroke.getKeyStroke('B', CTRL_DOWN_MASK));
65
66     menuBar.add(fileMenu);                                             // Add the file menu
67     menuBar.add(elementMenu);                                          // Add the element menu
68   }
69
70   private JMenuBar menuBar = new JMenuBar();                           // Window menu bar
71
72   // File menu items
73   private JMenuItem newItem,  openItem,   closeItem,
74                     saveItem, saveAsItem, printItem;
75
76   // Element menu items
77   private JRadioButtonMenuItem lineItem,  rectangleItem, circleItem,   // Types
78                                curveItem, textItem;
79   private JCheckBoxMenuItem    redItem,   yellowItem,                  // Colors
80                                greenItem, blueItem ;
81 }

快捷键是一种唯一的组合键,用于直接通过键盘选择菜单栏上的菜单以显示下拉菜单。setMnemoric()方法的作用是实现快捷键,并在菜单项标签中为快捷键字母加上下划线。菜单栏上每个菜单项的快捷键都必须是唯一的组合键。Windows中的典型快捷键是Alt键加菜单项标签中的大写字母。

加速键也是一种组合键,按下这种组合键,就可以直接从下拉菜单中选择菜单项,而不必先显示下拉菜单。在Windows下,Ctrl键常常和大写字母组合使用,作为菜单项的加速键。要为菜单项定义加速键,应调用封装了菜单项的对象的setAccelerator()方法。例如,对于Line菜单项,可以编写如下代码:

lineItem.setAccelerator(KeyStroke.getKeyStroke('L',InputEvent.CTRL_DOWN_MASK));

javax.swing.KeyStroke类定义了组合键。KeyStroke类中的静态方法getKeyStroke()返回对应于参数的KeyStroke对象。第一个参数是组合键中的字母,第二个参数指定一个或多个修饰键。只有大写字母才能用于表示组合键中的字母,小写字母会选择非字母键,例如数字小键盘和功能键。修饰符被指定为java.awt.event包中的InputEvent类所定义的单比特(single-bit)常量。InputEvent类定义的常量标识了键盘上的控制键和鼠标按钮。

 1 // Sketching application
 2 import javax.swing.*;
 3 import java.awt.*;
 4 import java.awt.event.*;
 5
 6 public class Sketcher implements WindowListener {
 7   public static void main(String[] args) {
 8      theApp = new Sketcher();                                          // Create the application object
 9    SwingUtilities.invokeLater(new Runnable() {
10             public void run() {
11               theApp.createGUI();                                      // Call GUI creator
12             }
13         });
14   }
15
16   // Method to create the application GUI
17   private void createGUI() {
18     window = new SketcherFrame("Sketcher");                            // Create the app window
19     Toolkit theKit = window.getToolkit();                              // Get the window toolkit
20     Dimension wndSize = theKit.getScreenSize();                        // Get screen size
21
22     // Set the position to screen center & size to half screen size
23     window.setSize(wndSize.width/2, wndSize.height/2);                 // Set window size
24     window.setLocationRelativeTo(null);                                // Center window
25     window.addWindowListener(this);                                    // theApp as window listener
26     window.setVisible(true);
27   }
28
29   // Handler for window closing event
30   public void windowClosing(WindowEvent e) {
31     window.dispose();                                                  // Release the window resources
32     System.exit(0);                                                    // End the application
33   }
34
35   // Listener interface methods you must implement -but don't need
36   public void windowOpened(WindowEvent e) {}
37   public void windowClosed(WindowEvent e) {}
38   public void windowIconified(WindowEvent e) {}
39   public void windowDeiconified(WindowEvent e) {}
40   public void windowActivated(WindowEvent e) {}
41   public void windowDeactivated(WindowEvent e) {}
42
43   private SketcherFrame window;                                        // The application window
44   private static Sketcher theApp;                                      // The application object
45 }

建立窗口组件后,createGUI()方法就调用窗口对象的addWindowListener()方法。addWindowListener()方法的参数是对接受窗口事件的监听器对象的引用,这里是变量this,表示应用程序对象theApp。如果其他监听器对象要注册为接受这个事件,只需要添加对addWindowListener()方法的更多调用,对每个监听器调用一次即可。

在Sketcher类中实现WindowListener接口时,必须实现这个接口声明的所有7个方法。否则类就是抽象的,就不能创建Sketcher类型的对象。这里只有windowClosing()方法包含代码,其他方法的方法体都是空的,因为不需要它们。

转载于:https://www.cnblogs.com/mannixiang/p/3486066.html

Java基础之处理事件——实现低级事件监听器(Sketcher 2 implementing a low-level listener)...相关推荐

  1. Java基础之处理事件——使用适配器类(Sketcher 3 using an Adapter class)

    控制台程序. 适配器类是指实现了监听器接口的类,但监听器接口中的方法没有内容,所以它们什么也不做.背后的思想是:允许从提供的适配器类派生自己的监听器类,之后再实现那些自己感兴趣的类.其他的空方法会从适 ...

  2. Java基础之处理事件——添加菜单图标(Sketcher 8 with toolbar buttons and menu icons)...

    控制台程序. 要为菜单项添加图标以补充工具栏图标,只需要在创建菜单项的Action对象中添加IconImage对象,作为SMALL_ICON键的值即可. 1 // Defines applicatio ...

  3. java游戏服务器开发之八--网络事件监听器

    java游戏服务器开发之八-网络事件监听器 网络事件监听器,将网络变化交由NetworkListener处理 可以看到,我们现在所有的逻辑都是写在TcpMessageStringHandler里面, ...

  4. 基础复习——Button——按钮——触发事件——监听器(单独公共)——点击事件与长按事件——禁用恢复按钮...

    按钮控件Button由TextView派生而来,它们之间的区别有: (1)Button拥有默认的按钮背景,而TextView默认无背景: (2)Button的内部文本默认居中对齐,而TextView的 ...

  5. java基础66 JavaScript中的事件、localtion对象、screen对象(网页知识)

    1.JavaScript中的事件注册 1.1.事件的注册方式 方式1:直接在html元素上注册<body onLoad="ready()"></body > ...

  6. Java基础之扩展GUI——添加状态栏(Sketcher 1 with a status bar)

    控制台程序. 为了显示各个应用程序参数的状态,并且将各个参数显示在各自的面板中,在应用程序窗口的底部添加状态栏是常见且非常方便的方式. 定义状态栏时没有Swing类可用,所以必须自己建立StatusB ...

  7. java添加事件监听器_Java事件监听器的四种实现方式

    自身类作为事件监听器 外部类作为事件监听器 匿名内部类作为事件监听器 内部类作为事件监听器 自身类作为事件监听器: 1 import javax.swing.*;2 import java.awt.* ...

  8. java中使用常见的几种监听器实现一种形似“水滴”的图形

    引言 首先,这篇文章的主要是通过使用界面设计,以及几种监听器来实现用户在界面上点击按钮,点击顶部菜单栏能够展开,滑动滚轮对一个圆形实现颜色.大小.位置的变化,产生一种形似"水滴"的 ...

  9. 13、Java Swing事件监听:事件处理模型和事件监听器

    事件表示程序和用户之间的交互,例如在文本框中输入,在列表框或组合框中选择,选中复选框和单选框,单击按钮等.事件处理表示程序对事件的响应,对用户的交互或者说对事件的处理是事件处理程序完成的. 当事件发生 ...

最新文章

  1. Android Studio 如何导出和导入自己的常用设置,避免重复制造轮子。加快开发速度...
  2. 最坏情况为线性时间的选择算法
  3. 2021年阳光高考成绩查询,高考攻略 | 2021年阳光高考月历来了!
  4. c/c++ struct的大小以及sizeof用法
  5. groovy 字符串截取最后一个_Java基础篇——字符串详解
  6. Springboot项目整合redis集群
  7. 搞乱别人精美的代码,一点数没有?
  8. Database—DML
  9. Slidworks2018基础到实战设计视频教程 产品建模 渲染 钣金设计
  10. jsp servlet mysql实现的java学生选课系统源码附带高清视频指导运行教程及论文
  11. h5唤起app,清除timeout
  12. XAPP1052理解
  13. Win7系统如何卸载残留无用驱动设备
  14. 浅谈大数据任务调度平台
  15. 软考新生必看!高项备考经验分享
  16. 单例设计模式(拉勾教育大数据学习笔记)
  17. 微信小程序直播间实现下拉刷新(目前全网最优最美观的方法)
  18. .NET 7 预览版 7
  19. wdr6500虚拟服务器,TP-Link TL-WDR6500双频无线路由器的安装教程
  20. 简单好用的 Linux/Windows 服务器管理面板

热门文章

  1. 电商宝SCRM:一款基于零售行业大数据驱动的自动化营销平台
  2. 阿里云专有云——安全可控由内而生
  3. [PaddleSeg源码阅读] PaddleSeg 导出静态图 export.py 文件中的道道
  4. 基于STM32的无线飞鼠(一)
  5. 2021深圳杯东三省D题具体思路+部分代码+抓捕数据
  6. 二维码签到技术(课设)
  7. [附源码]Python计算机毕业设计SSM隆庆祥企业服装销售管理系统(程序+LW)
  8. Vue:HeyUI组件TextEllipsis超出文本省略
  9. 智慧工厂如何设计,智能化工厂管理系统软件整体解决方案
  10. 【漆天编程】交易员为什么一定要学会EA编程