Java 2 SDK,1.4 beta 的最新发行版向 JFC/Swing 组件集添加了两个强大的新组件。其中一个是 JSpinner
,它使用户能够方便地选择日期、数字或拾取列表中的选项。(另一个是 JFormattedTextField
,用于支持格式化的输入。)
JSpinner
使您可创建一个排序的值列表,该表在选择框中每次显示一个选项,如图 1 所示。用户通过点击上移和下移箭头进行选择。
用户使用组件或键盘上的上移和下移箭头进行选择。他们也可输入自己的选择。然而,与 JComboBox
不同, JSpinner
不提供下拉列表选择,所以各个选择以及它们的顺序应有一定的意义。
要使用类,可简单地创建一个供选择的元素集合(在 List
或数组中),从列表中创建一个 SpinnerModel
,并为模型创建一个 JSpinner
:
String[] months = new DateFormatSymbols().getMonths(); |
根据您所用的输入类型,有以下几个可用于创建组件数据模型的帮助类:
-
SpinnerDateModel
:用于接受日期输入。该类支持通过将Calendar
类中的常数设置为不同的值来更改日期;例如,Calendar.WEEK_OF_MONTH
每次将日期更改一周。
-
SpinnerListModel
:用于接受来自值列表的输入。
-
SpinnerNumberModel
:用于接受已设定好步长的一定范围内的数字(int
或double
)的输入。
每个 SpinnerModel
执行取决于用于输入值的编辑器。此编辑器必须是一个 JComponent
;系统定义的编辑器子类 JSpinner.DefaultEditor
。其中一个可用于每个模型:
-
JSpinner.DateEditor
:用于SpinnerDateModel
。允许您定制输入日期格式。
-
JSpinner.ListEditor
:用于SpinnerListModel
。支持 type-ahead 来对值进行定位。
-
JSpinner.NumberEditor
:用于SpinnerNumberModel
。允许您定制十进制格式的模式。
|
|
JSpinner
组件象其它 Swing 组件一样工作。如果您有兴趣查出用户更改选择的时间,请连一个侦听器。对于 JSpinner
,侦听器是一个 ChangeListener
,您可直接将其连到 JSpinner
或其 SpinnerModel
上。虽然您可将侦听器连到两者中的任意一个,当值发生更改时, ChangeEvent
的源总是 SpinnerModel
:
ChangeListener listener = new ChangeListener() { |
|
|
让我们来看一下使用全部三种不同的 spinner 模型的示例(清单 3)。列表模型使用从 DateFormatSymbols
类取出的月份名称集。日期模型示例更改编辑器的输入格式。(beta 发行版中好象存在一处错误,当编辑器更改时不重新格式化字段。)当使用该字段旁边的箭头时,每次也可将日期移动一周。数字模型示例让用户选取从 0 到 100 之间的一个数字,当使用箭头时每次跳 5 个数。请注意:用户可输入任意数字,而并不仅限于 5 的倍数。
对于所有组件来说,当每个 spinner 值确实发生更改时,所连的侦听器将显示同一改变。如果使用光标键更改月、日或年,您会注意到直到按下回车键这些值才发生更改。
import javax.swing.*; |
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文 .
- 请为 spin 取出一个 JSpinner。下载我们在本文中使用的 源文件 。
- 请阅读在正式的 1.4 发行版文档中的
JSpinner
组件的概述: JSpinner -- 一个简单的序列容器 。
- 请利用其 javadoc 学习使用
JSpinner
。
- 请利用其 javadoc 学习使用
JFormattedTextField
。
- Kelvin Lawrence 在 “Java 基本类:Java GUI 开发新标准” 中介绍了 JFC 的性能和灵活性(developerWorks,1998 年 5 月)。
- Java 可访问性复选列表,是 IBM 与 Sun Microsystems 共同努力的成果,可向您显示如何创建可访问的应用程序。 Checkpoint 2.1 特别讨论了在应用程序中使用 JFC/Swing 组件的问题。
- 如果您使用 VisualAge for Java 开发 Java 应用程序,就应该阅读本指南,它演示了 使用带有 VisualAge for Java 的 Swing 组件 。
- 在 developerWorks Java 技术专区 中可找到更多的 Java 参考资料。