Java核心技术(事件处理)
2011-04-21 11:29
579 查看
事件处理基础
任何支持GUI的操作环境都要不断地监视敲击键盘或点击鼠标这样的事件。操作环境将这些事件报告给正在运行的应用程序。如果有事件产生,每个应用程序将决定如何对他们做出响应。在AWT所知的事件范围内,完全可以控制事件从事件源到事件监听器的传递过程,并将任何
对象指派给事件监听器。事件源有一些向其注册事件监听器的方法。当某个事件源产生事件时,事件源会向为事件注册的所有事件监听器对象
发送一个通告。在Java中,所有的事件对象都最终派生于java.util.EventObject类。不同的事件源可以产生不同类别的事件。
AWT事件处理机制概要:
*监听器对象是一个实现了特定监听器接口的类的实例。
*事件源是一个能够注册监听器对象并发送事件对象的对象。
*当事件发生时,事件源将事件对象传递给所有注册的监听器。
*监听器对象将利用事件对象中的信息决定如何对事件作出响应。
动作
Action接口可以封装命令,并将它们连接到多个事件源。AbstractAction类实现了除了actionPerformed方法外的所有方法。为了将动作与击键关联起来,首先需要生成KeyStroke类对象。KeyStroke类对象封装了对键的说明,通过调用getKeyStroke方法来构造
KeyStroke。
每个JComponent由三个输入映射,每一个映射的KeyStroke对象都与动作关联:
*WHEN_FOCUSED:当这个组件用友键盘焦点时
*WHEN_ANCESTOR_OF_FOCUSED_COMPONENT:当这个组件包含了拥有键盘焦点的组件时
*WHEN_IN_FOCUSED_WINDOW:当这个组件被包含在一个拥有键盘焦点组件的窗口中时
InputMap不能直接地将KeyStroke对象映射到Action对象,而是先映射到任意对象上,然后由ActionMap类实现将对象映射到动作上
的第二个映射。
鼠标事件
当用户点击鼠标按钮时,将会调用三个监听器方法:鼠标第一次被按下时调用mousePressed;鼠标被释放时调用mouseReleased;最后调用mouseClicked。getModifiersEx方法能准确地报告鼠标事件的鼠标按钮和键盘修饰符。
下面代码实现了Swing程序的不同外观,同时支持键盘事件响应(1234Esc)
public class ActionDemo extends JFrame { public static void main(String[] args) { JFrame frame = new ActionDemo(); frame.setVisible(true); } public ActionDemo() { setSize(WIDTH, HEIGHT); setTitle("LookAndFeel"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); InputMap inputMap = panel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); ActionMap actionMap = panel.getActionMap(); UIManager.LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels(); for (int i = 0; i < infos.length; i++) { Action action = new LookAndFeelAction(infos[i].getName(), infos[i].getClassName()); panel.add(new JButton(action)); inputMap.put(KeyStroke.getKeyStroke(49 + i, 0), infos[i].getName()); actionMap.put(infos[i].getName(), action); } add(panel, BorderLayout.CENTER); inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "esc"); actionMap.put("esc", new AbstractAction(){ public void actionPerformed(ActionEvent arg0) { System.exit(0); } }); } private static final int WIDTH = 500; private static final int HEIGHT = 200; class LookAndFeelAction extends AbstractAction { public LookAndFeelAction(String name, String lookAndFeel) { putValue(Action.NAME, name); putValue(Action.SHORT_DESCRIPTION, "set frame lookandfeel to " + name); putValue("lookAndFeel", lookAndFeel); } public void actionPerformed(ActionEvent e) { try { UIManager.setLookAndFeel(getValue("lookAndFeel").toString()); SwingUtilities.updateComponentTreeUI(ActionDemo.this); } catch (Exception ex) { ex.printStackTrace(); } } } }
相关文章推荐
- #Java 核心技术卷一阅读笔记# 第十一章 事件处理
- Java处理敲击键盘事件 Etch-A-Sketch玩具实现 光标画笔画图程序 Java核心技术
- java核心技术笔记 事件处理
- Java 按钮和单击事件映射到动作对象改变面板颜色小程序实例 Java核心技术 事件处理
- Java简单图形编辑器 放置、移动和擦除方块 鼠标事件测试程序 Java核心技术 事件处理
- 2015 7 3 java核心技术卷一 7-10章 图形,事件处理,Swing组件和应用程序部署
- java核心技术 事件处理
- 事件处理基础 处理按钮点击事件实例 Java核心技术
- Java核心技术:卷1笔记[6] 事件处理
- 博为峰Java技术文章 ——JavaSE Swing列表框选取事件的处理
- 博为峰Java技术文章 ——JavaSE Swing窗口事件的处理Ⅰ
- 博为峰Java技术文章 ——JavaSE Swing 下拉列表框的事件处理
- 小博老师解析Java核心技术 ——JSwing鼠标监听事件
- 小博老师解析Java核心技术 ——JSwing键盘监听事件
- 博为峰Java技术文章 ——JavaSE Swing焦点事件的处理
- 博为峰Java技术文章 ——JavaSE Swing列表框双击事件的处理Ⅱ
- 博为峰Java技术文章 ——JavaSE Swing 骤匿名类方式处理事件
- java核心技术卷 之事件处理基础
- 博为峰Java技术文章 ——JavaSE Swing列表框双击事件的处理Ⅰ
- 博为峰Java技术文章 ——JavaSE Swing列表框选取事件的处理