如图4-1所示,AbstractButton类是作用在幕后作为所用 的Swing按钮组件的一个重要Swing类。在本章稍后的JButton类中所描述的JButton是最简单的子类。其余的子类将会在后续的章节中进行描述。
所有的AbstractButton子类使用ButtonModel接口来存储数据模型。DefaultButtonModel类是所使用的默认实现。另外,我们可以将任意的AbstractButton对象组合为一个ButtonGroup。尽管这种组合对于JRadioButton与JRadioButtonMenuItem组件最为自然,然而任意的AbstractButton子类都会起作用。 表4-11列出了AbstractButton子类所共享的32个属性。这些属性可以使得我们自定义所有按钮的外观。 属性名 数据类型 访问性
action Action 读写绑定
actionCommand String 读写
actionListeners ActionListener[] 只读
borderPainted boolean 读写绑定
changeListeners ChangeListener[] 只读
contentAreaFilled boolean 读写绑定
disabledIcon Icon 读写绑定
disabledSelectedIcon Icon 读写绑定
disabledMnemonicIndex int 读写绑定
enabled boolean 只写
focusPainted boolean 读写绑定
horizontalAlignment int 读写绑定
horizontalTextPosition int 读写绑定
icon Icon 读写绑定
iconTextGap int 读写绑定
itemListeners ItemListener[] 只读
layout LayoutManager 只写
margin Insets 读写绑定
mnemonic char 读写绑定
mnemonic int 只写
model ButtonModel 读写绑定
multiClickThreshhold long 读写
pressedIcon Icon 读写绑定
rolloverEnabled boolean 读写绑定
rolloverIcon Icon 读写绑定
rolloverSelectedIcon Icon 读写绑定
selected boolean 读写
selectedIcon Icon 读写绑定
selectedObjects Object[] 只读
text String 读写绑定
UI ButtonUI 读写
verticalAlignment int 读写绑定
verticalTextPosition int 读写绑定
在这里值得一提的就是multiClickThreshhold。这个属性表示以毫秒计数的时间。如果一个按钮在这段时间间隔被鼠标多次选中,并不会产生额外的动作事件。默认情况下这个属性值为0,意味着每一次点击都会产生一个事件。为了避免在重要的对话框中偶然重复提交动作的发生,应将这个属性值设置0以上的合理值。
ButtonModel/Class DefaultButtonModel接口
ButtonModel接口被用来描述AbstractButton组件的当前状态。另外,他描述了为所有不同的AbstractButton子类所支持的事件监听器对象的集合。其定义如下: publicinterface ButtonModel extends ItemSelectable { // Propertiespublic String getActionCommand(); publicvoid setActionCommand(String newValue); publicboolean isArmed(); publicvoid setArmed(boolean newValue); publicboolean isEnabled(); publicvoid setEnabled(boolean newValue); publicvoid setGroup(ButtonGroup newValue); publicint getMnemonic(); publicvoid setMnemonic(int newValue); publicboolean isPressed(); publicvoid setPressed(boolean newValue); publicboolean isRollover(); publicvoid setRollover(boolean newValue); publicboolean isSelected(); publicvoid setSelected(boolean newValue); // Listenerspublicvoid addActionListener(ActionListener listener); publicvoid removeActionListener(ActionListener listener); publicvoid addChangeListener(ChangeListener listener); publicvoid removeChangeListener(ChangeListener listener); publicvoid addItemListener(ItemListener listener); publicvoid removeItemListener(ItemListener listener); }
我们将要使用的特定的ButtonModel实现是DefaultButtonModel类,除非我们定义了自己的类。DefaultButtonModel类定义了不同的事件监听器的所有事件注册方法并且管理按钮状态并组织在ButtonGroup中。表4-12显示其9个属性。除了selectedObjects以外,他们均来自ButtonGroup接口,selectedObjects属性是DefaultButtonModel类的新成员,但是对于JToggleButton十分有用。在第5章中将会讨论ToggleButtonModel。
DefaultButtonModel属性 大多数情况下,我们并不直接访问ButtonModel。相反,使用ButtonModel的组件封装他们属性调用来更新模型属性。
理解AbstractButton热键
热键是一种特殊的键盘快捷键,当按下时会使用一个特定的动作发生。在前的JLable类一节中讨论JLablel时,按下所显示的热键会使得相关联的组件获得输入焦点。在AbstractButton的情况下,按下按键的热键会使得按钮被选中。
热键的实际点击需要一个观感特定的热键的点击(这个键通常是Alt键)。所以,如果一个按钮的热键是B键,我们需要按下Alt-B来激活具有B热键的按钮。当按钮被激活时,所注册的监听器会被通知相应的状态变化。例如,对于JButton,所有的ActionListener对象都会被通知。
如果热键是按钮文本标签的一部分,我们会看到这个字符以下划线表示。这会由于当前的观感不同而有不同的显示。另外,如果热键并不是文本标签的一部分,对于特定的热键的选中并不有可见的指示符,除非观感在工具提示文本中进行显示。
图4-11显示了两个按钮:一个具有W热键,而另一个具有H热键。左边的按钮在其内容具有W的标签,所以第一个W会以下划线显示。第二个组件并没有由按钮上的这种行为获益,但是在Ocean观感中,如果工具提示文本进行了设置则会时行标识。
要为抽象按钮赋予一个热键,我们可以使用任意一个setMnemonic()方法。其中一个接受char参数,而另一个则接受int参数。就个人而言,我比较喜欢int版本,其参数值是KeyEvent类中众多VK_*常量的一个。我们也可以通过displayedMnemonicIndex属性来指定热键。 理解AbstractButton图标
AbstractButton具有七个特定的图标属性。默认的图标是icon属性。这个属性用于所有的情况,除非指定了一个不同的图标或是组件提供了默认的行为。selectedIcon属性是按钮被选中时所使用的图标。pressedIcon是按钮被按下时所用的图标。使用这两种图标中的哪一种依赖于组件,因为JButton被按下但是并没有被选中,而JCheckBox被选中却没有被按下。
当按钮通过setEnabled(false)被禁止时要使用disabledIcon与disabledSelectedIcon属性。默认情况下,如果图标是一个ImageIcon,将会使用图标的一个灰度平衡版本。
其他的两个属性,rolloverIcon与rolloverSelectedIcon允许我们当鼠标划过按钮时(rolloverEnabled为true)显示不同的图标。
理解内部的AbstractButton位置
horizontalAlignment, horizontalTextPosition, verticalAlignment与verticalTextPostion属性与JLabel类共享相同的设置与行为。表4-13列出这些属性。 尽管我们并不会直接创建一个AbstractButton实例,但是我们会创建其子类。所有子类共享一个共同的事件处理功能集合。我们可以向抽象按钮注册PropertyChangeListener,ActionListener,ItemListener以及ChangeListener对象。在这里将会讨论PropertyChangeListener对象,其余的对象将会在后续的章节中进行讨论。
与JComponent类类似,AbstractButton组件支持当类的实例的绑定属性变化时支持PropertyChangeListener对象注册的检测。与JComponent类不同的是,AbstractButton组件提供了下列的类常量集合来表示不同的属性变化:
发表评论
-
一个字符串问题的思考
2012-07-06 09:51 496一、 问题描述: 求解给定文本text 中以字符 A ... -
Vim正则表达式查找替换
2012-07-06 09:45 934这里简单的给大家介绍一下Vim的查找替换,众所周知,Vim ... -
使用正则表达式实现表达式计算器
2012-07-06 09:37 1234使用正则表达式实 ... -
VTK使用入门(四)
2012-07-06 09:30 1769#include "vtkDICOMImageR ... -
页面仿百度下拉框,支持动态后台提取数据
2012-07-05 20:44 998.bottom_up { font-family ... -
Flex 文件上传导入组件
2012-07-02 10:22 334上文讲到Flex利用Blazeds来上传文件,本文则封装了 ... -
flex分页控件源码
2012-07-02 10:22 563功能说明:只配合服务器端分页。这个分页条是通用的。只需要在 ... -
自定义网页滚动条
2012-07-02 10:21 520用户操作 [留言] [发消息] [加为好友] ... -
Three ways to set a custom busy cursor in flex
2012-07-02 10:21 507First, prepare your custom cu ... -
Android
2012-07-02 09:43 446... -
PHP作为Flex程序的数据源
2012-07-01 09:41 446Adobe Flash Builder 4 简体中文正式版 ... -
Flex和Spring的整合
2012-07-01 09:41 390关于Flex Adobe Flex是一套创建富客户端应用( ... -
实现FLEX 通过AMF跟PHP通信
2012-07-01 09:41 517AMF flex一种远调用 ... -
Java Server Push To Flex (ServerPush)
2012-07-01 09:40 514在网上找了许多的Flex与java 通信做ServerPu ... -
linux 下同名符号冲突问题解决方法
2012-06-30 17:56 1646最近的工作中遇到如下令人蛋疼的问题: linux 下 ... -
在xp和Win7上使用Tomcat 6.0经常遇到的几个问题及其解决方法
2012-06-30 17:56 497在Win7上使用Tomcat 6.0经常会遇到一下几个问题 ... -
找到多个具有相同 ID“_header”的控件。FindControl 要求控件具有唯一的 ID。错误的解决方法!
2012-06-30 17:56 529找到多个具有相 ... -
DB2相关问题及解决方法
2012-06-30 17:56 495DB2相关问题及解决方法: 一、DB2中的代码页( ... -
session串的问题以及解决方法
2012-06-30 17:56 560什么是session串的问题 典型案例:现有一W ...
相关推荐
用大量图示分析了Swing组件的特点、结构及相互关系,使有经验的编程人员能高效利用Swing的强大功能。本书对掌握Swing技术提供了最全面的参考 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
Swing JTable组件设置单元格合并,内置Test测试类,核心API GridBagTable tasktable = new GridBagTable(model); tasktable.mergeCells(startRow, endRow, 0, 0);
这个图书管理系统,主要是对图书和员工进行管理、维护,基本实现了借阅到规划图书的流程,采用swing组件,由纯Java语言编写而成,核心就是对数据库的增、删、改查
系统基于JAVA的Application模式,使用Swing组件作为系统用户界面和MYSQL小型数据库管理系统实现。主要提供用户查询功能、住宿管理等功能,提供管理员客房、用户、系统信息的管理功能。 该系统遵循软件工程中的开发...
学习笔记:整理了Java语言在游戏开发中的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的...
这是什么JHexViewer是基本的十六进制查看器Swing组件,可用于基于它创建更复杂的十六进制查看器。 为了使它可定制且易于扩展,我们付出了很多努力,而不是强迫您使用固定的实现。 几乎所有内容都可以更改,例如内容...
系统基于JAVA的Application模式,使用Swing组件作为系统用户界面和MYSQL小型数据库管理系统实现。主要提供用户查询功能、住宿管理等功能,提供管理员客房、用户、系统信息的管理功能。 该系统遵循软件工程中的开发...
掌握Java语言基础知识 理解面向对象的编程思想 运用Java编写命令行程序 运用JDBC编写数据库访问程序 运用Swing组件编写图形用户界面程序 运用Swing组件和JDBC实现C/S结构的应用程序
可视化浏览应用程序组件层次结构 监控 AWT/Swing 事件 调试 2D 图形 轻松找到源代码中负责创建特定 UI 的位置。 监控线程规则违规 下面显示了 Swing Explorer 如何检查基本的 Swing 应用程序。 有关 Swing Explorer ...
全书共14章,包括Java基本的程序结构、对象与类、继承、接口与内部类、图形程序设计、事件处理、Swing用户界面组件、部署应用程序和Applet、异常日志断言和调试、叙述方式深入浅出,并包含大量示例,从而帮助读者...
全书共14章,包括Java基本的程序结构、对象与类、继承、接口与内部类、图形程序设计、事件处理、Swing用户界面组件、部署应用程序和Applet、异常日志断言和调试、叙述方式深入浅出,并包含大量示例,从而帮助读者...
全书共14章,包括Java基本的程序结构、对象与类、继承、接口与内部类、图形程序设计、事件处理、Swing用户界面组件、部署应用程序和Applet、异常日志断言和调试、叙述方式深入浅出,并包含大量示例,从而帮助读者...
全书共14章,包括Java基本的程序结构、对象与类、继承、接口与内部类、图形程序设计、事件处理、Swing用户界面组件、部署应用程序和Applet、异常日志断言和调试、叙述方式深入浅出,并包含大量示例,从而帮助读者...
全书共14章,包括Java基本的程序结构、对象与类、继承、接口与内部类、图形程序设计、事件处理、Swing用户界面组件、部署应用程序和Applet、异常日志断言和调试、叙述方式深入浅出,并包含大量示例,从而帮助读者...
swing程序源码 Java 7 程序设计入门经典 《Java 7 程序设计入门经典》根据最新的 Java 7 撰写,全面系统地讲解了 Java 语言的语法和核心要素、利用 Swing 进行 GUI 编程以及 Java API 库三大方面的内容,包含大量...
全书共14章,包括Java基本的程序结构、对象与类、继承、接口与内部类、图形程序设计、事件处理、Swing用户界面组件、部署应用程序和Applet、异常日志断言和调试、叙述方式深入浅出,并包含大量示例,从而帮助读者...
全书共14章,包括Java基本的程序结构、对象与类、继承、接口与内部类、图形程序设计、事件处理、Swing用户界面组件、部署应用程序和Applet、异常日志断言和调试、泛型程序设计、集合以及多线程等内容。 全书对Java...
连连看是一种消除类益智游戏,核心要求是在规定的时间内,消除游戏界面中选中的两张相同的图案,...本系统主要是运用Swing组件和事件处理技术,进行界面的绘制,鼠标的操作,以及积分的显示和沙漏的计时的显示等功能。