让我们来看一下使用全部三种不同的 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
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