<b>Swing 的新 Spinner 组件</b>[Java编程]
本文“<b>Swing 的新 Spinner 组件</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Java 2 SDK,1.4 beta 的最新发行版向 JFC/Swing 组件集增添了两个强盛的新组件.此中一个是 JSpinner ,它利用户可以便利地挑选日期、数字或拾取列表中的选项.(另一个是 JFormattedTextField ,用于支持格局化的输入.)
开始启动
JSpinner 使您可成立一个排序的值列表,该表在挑选框中每次显示一个选项,如图 1 所示.用户通过点击上移和下移箭头举行挑选.
图 1. JSpinner 示例
用户利用组件或键盘上的上移和下移箭头举行挑选.他们也可输入自己的挑选.但是,与 JComboBox 差别, JSpinner 不供应下拉列表挑选,所以各个挑选以及它们的次序应有一定的意义.
要利用类,可简单地成立一个供挑选的元素调集(在 List 或数组中),从列表中成立一个 SpinnerModel ,并为模子成立一个 JSpinner :
清单 1. 简单的 JSpinner 用法
按照您所用的输入范例,有以下几个可用于成立组件数据模子的帮忙类:
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 .答应您定制十进制格局的情势.
全部这些类(及更多类)之间的关系如图 2 所示.
图 2. JSpinner UML 关系表示图
1 String[] months = new DateFormatSymbols().getMonths(); 2 SpinnerModel model = new SpinnerListModel(months); 3 JSpinner spinner = new JSpinner(model); 4 |
1 ChangeListener listener = new ChangeListener() { 2 public void stateChanged(ChangeEvent e) { 3 SpinnerModel source = (SpinnerModel)e.getSource(); 4 System.out.println("The value is: " + source.getValue()); 5 } 6 }; 7 model.addChangeListener(listener); 8 |
让我们来看一下利用全部三种差别的 spinner 模子的示例(清单 3).列表模子利用从 DateFormatSymbols 类取出的月份名称集.日期模子示例更改编辑器的输入格局.(beta 发行版中好象存在一处错误,当编辑器更改时不重新格局化字段.)当利用该字段旁边的箭头时,每次也可将日期移动一周.数字模子示例让用户选取从 0 到 100 之间的一个数字,当利用箭头时每次跳 5 个数.请注意:用户可输入肆意数字,而并不但限于 5 的倍数.
关于全部组件来说,当每个 spinner 值确切发生更改时,所连的侦听器将显示同一改变.假如利用光标键更改月、日或年,您会注意到直到按下回车键这些值才发生更改.
清单 3. JSpinner 完好示例
1 import javax.swing.*; 2 import javax.swing.event.*; 3 import java.text.*; 4 import java.awt.*; 5 import java.util.*; 6 public class Spinner { 7 public static void main (String args[]) throws Exception { 8 JFrame frame = new JFrame("Spinner"); 9 frame.setDefaultCloseOperation(3); 10 String[] months = new DateFormatSymbols().getMonths(); 11 SpinnerModel model = new SpinnerListModel(months); 12 JSpinner spinner = new JSpinner(model); 13 frame.getContentPane().add(spinner, BorderLayout.NORTH); 14 SpinnerDateModel model2 = new SpinnerDateModel(); 15 model2.setCalendarField(Calendar.WEEK_OF_MONTH); 16 JSpinner spinner2 = new JSpinner(model2); 17 JSpinner.DateEditor editor2 = new JSpinner.DateEditor( 18 spinner2, "MMMMM dd, yyyy"); 19 spinner2.setEditor(editor2); 20 frame.getContentPane().add(spinner2, BorderLayout.SOUTH); 21 SpinnerNumberModel model3 = new SpinnerNumberModel(50, 0, 100, 5); 22 JSpinner spinner3 = new JSpinner(model3); 23 frame.getContentPane().add(spinner3, BorderLayout.CENTER); 24 ChangeListener listener = new ChangeListener() { 25 public void stateChanged(ChangeEvent e) { 26 SpinnerModel source = (SpinnerModel)e.getSource(); 27 System.out.println("The value is: " + source.getValue()); 28 } 29 }; 30 model.addChangeListener(listener); 31 model2.addChangeListener(listener); 32 model3.addChangeListener(listener); 33 frame.pack(); 34 frame.show(); 35 } 36 } 37 |
以上是“<b>Swing 的新 Spinner 组件</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |