控制台程序. 为表示事件的常量使用标识符可以直接启用组件对象的特定事件组.调用组件的enableEvent()方法,并把想要启用事件的标识符传送为参数,但这只在不使用监视器的情况下有效.注册监听器会自动启用监听器想要监听的事件,所以不需要调用enableEvent()方法.只有当希望对象能处理自己的某些事件时,才调用enableEvent()方法,但使用监听器可以达到相同的效果. 使用监听器对象是处理事件的首选方式,因为更容易直接启用对象的事件,代码也更简洁. // Main window fo…
控制台程序. 为了标识元素的类型,可以为菜单已提供的4中元素定义常量,用作ID.这有助于执行菜单项监听器的操作,还提供了一种标识颜色类型的方式.我们会累积许多应用程序范围的常量,所以把它们定义为可以静态导入的类中的静态域会比较方便.为了导入静态域,类必须在指定的包中,所以先建立包. 为了把类放在Constants包中,需要在硬盘的合适位置建立以Constants命名的目录,然后在编译Constants包中的类时,使用-classpath选项标识Constants目录的路径. // Defines…
控制台程序. 工具栏在应用程序窗口中通常位于内容面板顶部的菜单栏下,包含直接访问菜单选项的按钮.在Sketcher程序中可以为最常用的菜单项添加工具栏. 工具栏是javax.swing.JToolBar类定义的Swing组件.想SketcherFrame类定义中添加如下域,可以为这个类添加一个用于工具栏的成员: private JToolBar toolBar = new JToolBar(); 为了把工具栏添加到应用程序窗口中,需要在SkecherFrame构造函数已有代码的后面添加如下语句:…
控制台程序. 定义事件监听器的类必须实现监听器接口.所有的事件监听器接口都扩展了java.util.EventListener接口.这个接口没有声明任何方法,仅仅用于表示监听器对象.使用EventListener类型的变量可以保存任意事件监听器对象的引用. 要为特定的事件类型实现监听器,只需要实现对应接口中的方法即可.让应用程序类成为窗口事件的监听器,就可以处理SketcherFrame窗口的一些窗口事件.接下来必须创建Sketcher对象,作为事件的监听器. // Main window fo…
控制台程序. 要为菜单项添加图标以补充工具栏图标,只需要在创建菜单项的Action对象中添加IconImage对象,作为SMALL_ICON键的值即可. // Defines application wide constants package Constants; import java.awt.Color; import javax.swing.*; public class SketcherConstants { // Path for images public final static…
控制台程序. 动作Action是任何实现了javax.swing.Action接口的类的对象.这个接口声明了操作Action对象的方法,例如,存储与动作相关的属性.启用和禁用动作.Action接口扩展了ActionListener接口,所以Action对象既是监听器,也是动作. 一些Swing组件,包括JMenu和JToolBar类型的组件,都有add()方法,可以接受Action类型的参数.当使用add()方法把Action对象添加到JMenu对象中,add()方法就会创建类型自动正确的组件.…
控制台程序. 适配器类是指实现了监听器接口的类,但监听器接口中的方法没有内容,所以它们什么也不做.背后的思想是:允许从提供的适配器类派生自己的监听器类,之后再实现那些自己感兴趣的类.其他的空方法会从适配器类中继承,所以无须担心它们. 修改上一文中的Sketcher类如下: // Sketching application import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Sketcher…
控制台程序. 在Java中实现对工具提示的支持是非常简单的,秘诀仍在我们一直使用的Action对象中.Action对象拥有存储工具提示文本的内置功能因为文本是通过SHORT_DESCRIPTION键提供的,我们只需要把工具提示文本存储为这个键的值即可. 下面仅列出修改后的SketcherFrame类: // Frame for the Sketcher application import javax.swing.*; import javax.swing.border.*; import ja…
控制台程序. 定义监听器类有许多方式.下面把监听器类定义为单独的类MouseHandler: // Mouse event handler for a selection button import java.awt.Cursor; import java.awt.event.*; public class MouseHandler extends MouseAdapter { Cursor handCursor = new Cursor(Cursor.HAND_CURSOR); Cursor…
控制台程序. 语义事件与程序GUI上的组件操作有关.例如,如果选择菜单项或单击按钮,就会生成语义事件. 对组件执行操作时,例如选择菜单项或单击按钮,就会生成ActionEvent事件.在选择或取消选择某个组件时,会生成ItemEvent事件.在调整可调整的对象(如滚动条)时,就生成AdjustmentEvent事件. 上面的每一种语义事件类型都定义了相应的监听器接口,这些接口都只声明了一个方法: 1.ActionListener定义了actionPerformed(ActionEvent e)方…