java核心技术10阅读(十一)-事件处理

原始的 C这样的语言进行事件驱动的程序设计,那就需要编写代 码来不断地检查事件队列,以便査询操作环境报告的内容(通常这些代码被放置在包含很多 switch语句的循环体中)。显然,这种方式编写的程序可读性很差,而且在有些情况下,编码 的难度也非常大。它的好处在于响应的事件不受限制,而不像 Visual Basic这样的语言,将 事件队列对程序员隐藏起来。
在 AWT所知的事件范围内,完全可以控制事件从事件源 ( event source) 例如,按钮或滚动条,到事件监听器(event listener) 的传递过程,并将任何对象指派给事件监听器。不过事实上,应该选择一个能够便于响应事件的对象。这种事件委托模型(event delegation model ) 与 Visual Basic 那种预定义监听器模型比较起来更加灵活。
Java这样的面向对象语言,都将事件的相关信息封装在一个事件对象(event object ) 中。在 Java中,所有的事件对象都最终派生于java.util.EventObject 类。
在这里插入图片描述
使用 ActionListener 接口的方式都是一样的: actionPerformed 方
法(ActionListener 中的唯一方法)将接收一个 ActionEvent 类型的对象作为参数。这个事 件对象包含了事件发生时的相关信息。

简洁指定监听器
通常来讲,每个监听器执行一个单独的动作。,使用lambda表达式

exitButton.addActionListener(event-> Systeu.exit(O)) ;

一键改变UI

UIManager.setLookAndFeel (className) ;  //ClassName为UI对象名称
SwingUtilities.updateComponentTreeUI (this) ;//this指整体窗口/框架

适配器类
每个含有多个方法的AWT监听器接口都配有一个适配器(adapter) 类,这个类实现了接口中的所有方 法,但每个方法没有做任何事情。例如监听整个窗口动作的WindowListener接口,包含七个方法

动作
Swing包提供了一种非常实用的机制来封装命令,并将它们连接到多个事件源,这就是
Action接口。
Keystroke是一个很有用的类,它封装了对键的说明,实现实现不同按键,

keyboard focus概念

每个 JComponent 有三个输入映射(imputmap),每一个映射的 Keystroke 对象都与动作关联。
在这里插入图片描述
InputMap 不能直接地将 Keystroke 对象映射到 Action对象。而是先映射到任意对象上,
然后由 ActionMap类实现将对象映射到动作上的第 2个映射。这样很容易实现来自不同输入 映射的按键共享一个动作的目的。

 InputMap imap = buttonPanel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
imap.put(KeyStroke.getKeyStroke("ctrl Y"), "panel.yellow");
ActionMap amap = panel.put(KeyStroke.getKeyStroke("ctrl Y","panel.yellow");
amap.put("panel.yellow", yellowAction) ;

在这里插入图片描述
鼠标
MouseListener、MouseMotionListener接口
MouseListener负责处理了mousePressed、mouseReleased、mouseClicked方法,MouseMotionListener负责处理moves、dragged方法

发布了15 篇原创文章 · 获赞 1 · 访问量 125

猜你喜欢

转载自blog.csdn.net/qq_17236715/article/details/105145105