1 import javax.swing.*;
2 import javax.swing.event.*;
3 import java.util.*;
4 import java.text.*;
5 import java.awt.*;
6
7 public class SpinnerModelEditorDemo extends JApplet {
8
9 private JSpinner jspDate =
10 new JSpinner(new SpinnerDateModel());
11 private JSpinner jspDay =
12 new JSpinner(new SpinnerNumberModel(1, 1, 31, 1));
13 private String[] monthNames = new DateFormatSymbols().getMonths();
14 private JSpinner jspMonth = new JSpinner
15 (new SpinnerListModel(Arrays.asList(monthNames).subList(0, 12)));
16 private JSpinner spinnerYear =
17 new JSpinner(new SpinnerNumberModel(2004, 1, 3000, 1));
18
19 public SpinnerModelEditorDemo() {
20
21 JPanel panel1 = new JPanel();
22 panel1.setLayout(new GridLayout(4, 1));
23 panel1.add(new JLabel("Date"));
24 panel1.add(new JLabel("Day"));
25 panel1.add(new JLabel("Month"));
26 panel1.add(new JLabel("Year"));
27
28
29 JPanel panel2 = new JPanel();
30 panel2.setLayout(new GridLayout(4, 1));
31 panel2.add(jspDate);
32 panel2.add(jspDay);
33 panel2.add(jspMonth);
34 panel2.add(spinnerYear);
35
36
37 add(panel1, BorderLayout.WEST);
38 add(panel2, BorderLayout.CENTER);
39
40
41 JSpinner.DateEditor dateEditor =
42 new JSpinner.DateEditor(jspDate, "MMM dd, yyyy");
43 jspDate.setEditor(dateEditor);
44
45
46 JSpinner.NumberEditor yearEditor =
47 new JSpinner.NumberEditor(spinnerYear, "####");
48 spinnerYear.setEditor(yearEditor);
49
50
51 updateDate();
52
53
54 jspDay.addChangeListener(new ChangeListener() {
55 @Override
56 public void stateChanged(javax.swing.event.ChangeEvent e) {
57 updateDate();
58 }
59 });
60
61
62 jspMonth.addChangeListener(new ChangeListener() {
63 @Override
64 public void stateChanged(javax.swing.event.ChangeEvent e) {
65 updateDate();
66 }
67 });
68
69
70 spinnerYear.addChangeListener(new ChangeListener() {
71 @Override
72 public void stateChanged(javax.swing.event.ChangeEvent e) {
73 updateDate();
74 }
75 });
76 }
77
78
79 private void updateDate() {
80
81 int month = ((SpinnerListModel)jspMonth.getModel()).
82 getList().indexOf(jspMonth.getValue());
83 int year = ((Integer)spinnerYear.getValue()).intValue();
84
85
86 SpinnerNumberModel numberModel =
87 (SpinnerNumberModel)jspDay.getModel();
88 numberModel.setMaximum(new Integer(maxDaysInMonth(year, month)));
89
90
91 if (((Integer)(numberModel.getValue())).intValue() >
92 maxDaysInMonth(year, month))
93 numberModel.setValue(new Integer(maxDaysInMonth(year, month)));
94
95
96 int day = ((Integer)jspDay.getValue()).intValue();
97
98
99 jspDate.setValue(
100 new GregorianCalendar(year, month, day).getTime());
101 }
102
103
105 private int maxDaysInMonth(int year, int month) {
106 Calendar calendar = new GregorianCalendar(year, month, 1);
107 return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
108 }
109
110 public static void main(String[] args) {
111 javax.swing.JFrame frame = new javax.swing.JFrame(
112 "SpinnerModelEditorDemo");
113
114 SpinnerModelEditorDemo applet = new SpinnerModelEditorDemo();
115
116
117 frame.getContentPane().add(applet, java.awt.BorderLayout.CENTER);
118 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
119
120
121 applet.init();
122 applet.start();
123
124
125 frame.pack();
126 frame.setVisible(true);
127 }
128 }