Java基础之处理事件——实现低级事件监听器(Sketcher 2 implementing a low-level listener)...
控制台程序。
定义事件监听器的类必须实现监听器接口。所有的事件监听器接口都扩展了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)...相关推荐
- Java基础之处理事件——使用适配器类(Sketcher 3 using an Adapter class)
控制台程序. 适配器类是指实现了监听器接口的类,但监听器接口中的方法没有内容,所以它们什么也不做.背后的思想是:允许从提供的适配器类派生自己的监听器类,之后再实现那些自己感兴趣的类.其他的空方法会从适 ...
- Java基础之处理事件——添加菜单图标(Sketcher 8 with toolbar buttons and menu icons)...
控制台程序. 要为菜单项添加图标以补充工具栏图标,只需要在创建菜单项的Action对象中添加IconImage对象,作为SMALL_ICON键的值即可. 1 // Defines applicatio ...
- java游戏服务器开发之八--网络事件监听器
java游戏服务器开发之八-网络事件监听器 网络事件监听器,将网络变化交由NetworkListener处理 可以看到,我们现在所有的逻辑都是写在TcpMessageStringHandler里面, ...
- 基础复习——Button——按钮——触发事件——监听器(单独公共)——点击事件与长按事件——禁用恢复按钮...
按钮控件Button由TextView派生而来,它们之间的区别有: (1)Button拥有默认的按钮背景,而TextView默认无背景: (2)Button的内部文本默认居中对齐,而TextView的 ...
- java基础66 JavaScript中的事件、localtion对象、screen对象(网页知识)
1.JavaScript中的事件注册 1.1.事件的注册方式 方式1:直接在html元素上注册<body onLoad="ready()"></body > ...
- Java基础之扩展GUI——添加状态栏(Sketcher 1 with a status bar)
控制台程序. 为了显示各个应用程序参数的状态,并且将各个参数显示在各自的面板中,在应用程序窗口的底部添加状态栏是常见且非常方便的方式. 定义状态栏时没有Swing类可用,所以必须自己建立StatusB ...
- java添加事件监听器_Java事件监听器的四种实现方式
自身类作为事件监听器 外部类作为事件监听器 匿名内部类作为事件监听器 内部类作为事件监听器 自身类作为事件监听器: 1 import javax.swing.*;2 import java.awt.* ...
- java中使用常见的几种监听器实现一种形似“水滴”的图形
引言 首先,这篇文章的主要是通过使用界面设计,以及几种监听器来实现用户在界面上点击按钮,点击顶部菜单栏能够展开,滑动滚轮对一个圆形实现颜色.大小.位置的变化,产生一种形似"水滴"的 ...
- 13、Java Swing事件监听:事件处理模型和事件监听器
事件表示程序和用户之间的交互,例如在文本框中输入,在列表框或组合框中选择,选中复选框和单选框,单击按钮等.事件处理表示程序对事件的响应,对用户的交互或者说对事件的处理是事件处理程序完成的. 当事件发生 ...
最新文章
- Android Studio 如何导出和导入自己的常用设置,避免重复制造轮子。加快开发速度...
- 最坏情况为线性时间的选择算法
- 2021年阳光高考成绩查询,高考攻略 | 2021年阳光高考月历来了!
- c/c++ struct的大小以及sizeof用法
- groovy 字符串截取最后一个_Java基础篇——字符串详解
- Springboot项目整合redis集群
- 搞乱别人精美的代码,一点数没有?
- Database—DML
- Slidworks2018基础到实战设计视频教程 产品建模 渲染 钣金设计
- jsp servlet mysql实现的java学生选课系统源码附带高清视频指导运行教程及论文
- h5唤起app,清除timeout
- XAPP1052理解
- Win7系统如何卸载残留无用驱动设备
- 浅谈大数据任务调度平台
- 软考新生必看!高项备考经验分享
- 单例设计模式(拉勾教育大数据学习笔记)
- 微信小程序直播间实现下拉刷新(目前全网最优最美观的方法)
- .NET 7 预览版 7
- wdr6500虚拟服务器,TP-Link TL-WDR6500双频无线路由器的安装教程
- 简单好用的 Linux/Windows 服务器管理面板
热门文章
- 电商宝SCRM:一款基于零售行业大数据驱动的自动化营销平台
- 阿里云专有云——安全可控由内而生
- [PaddleSeg源码阅读] PaddleSeg 导出静态图 export.py 文件中的道道
- 基于STM32的无线飞鼠(一)
- 2021深圳杯东三省D题具体思路+部分代码+抓捕数据
- 二维码签到技术(课设)
- [附源码]Python计算机毕业设计SSM隆庆祥企业服装销售管理系统(程序+LW)
- Vue:HeyUI组件TextEllipsis超出文本省略
- 智慧工厂如何设计,智能化工厂管理系统软件整体解决方案
- 【漆天编程】交易员为什么一定要学会EA编程