📄 exercise24_1.java
字号:
import javax.swing.*;import javax.swing.event.*;import java.util.*;import java.text.*;import java.awt.*;public class Exercise24_1 extends JApplet { // Create four spinners for date, day, month, and year private JSpinner spinnerDate = new JSpinner(new SpinnerDateModel()); private JSpinner spinnerDay = new JSpinner(new SpinnerNumberModel(1, 1, 31, 1)); private String[] monthNames = new DateFormatSymbols().getMonths(); private JSpinner spinnerMonth = new JSpinner (new SpinnerListModel(Arrays.asList(monthNames).subList(0, 12))); private JSpinner spinnerYear = new JSpinner(new SpinnerNumberModel(2004, 1, 3000, 1)); public Exercise24_1() { // Group labels JPanel panel1 = new JPanel(); panel1.setLayout(new GridLayout(4, 1)); panel1.add(new JLabel("Date")); panel1.add(new JLabel("Day")); panel1.add(new JLabel("Month")); panel1.add(new JLabel("Year")); // Group spinners JPanel panel2 = new JPanel(); panel2.setLayout(new GridLayout(4, 1)); panel2.add(spinnerDate); panel2.add(spinnerDay); panel2.add(spinnerMonth); panel2.add(spinnerYear); // Add spinner and label to the UI getContentPane().add(panel1, BorderLayout.WEST); getContentPane().add(panel2, BorderLayout.CENTER); // Set editor for date JSpinner.DateEditor dateEditor = new JSpinner.DateEditor(spinnerDate, "MMM dd, yyyy"); spinnerDate.setEditor(dateEditor); // Set editor for year JSpinner.NumberEditor yearEditor = new JSpinner.NumberEditor(spinnerYear, "####"); spinnerYear.setEditor(yearEditor); // Update date to synchronize with the day, month, and year updateDate(); // Register and create a listener for spinnerDay spinnerDay.addChangeListener(new ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { updateDate(); } }); // Register and create a listener for spinnerMonth spinnerMonth.addChangeListener(new ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { updateDate(); } }); // Register and create a listener for spinnerYear spinnerYear.addChangeListener(new ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { updateDate(); } }); // Register and create a listener for spinnerDate spinnerDate.addChangeListener(new ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent e) { // Get current day, month, and year in int int day = ((Date)spinnerDate.getValue()).getDate(); int month = ((Date)spinnerDate.getValue()).getMonth(); int year = ((Date)spinnerDate.getValue()).getYear(); // Set a new date in the date spinner System.out.println("day is " + day + " month is " + month + " year is " + year); spinnerDay.setValue(new Integer(day)); spinnerMonth.setValue(monthNames[month]); spinnerYear.setValue(new Integer(year + 1900)); } }); } // Update date spinner to synchronize with the other three spinners private void updateDate() { // Get current month and year in int int month = ((SpinnerListModel) spinnerMonth.getModel()). getList().indexOf(spinnerMonth.getValue()); int year = ((Integer)spinnerYear.getValue()).intValue(); // Set a new maximum number of days for the new month and year SpinnerNumberModel numberModel = (SpinnerNumberModel)spinnerDay.getModel(); numberModel.setMaximum(new Integer(maxDaysInMonth(year, month))); // Set a new current day if it exceeds the maximum if (((Integer)(numberModel.getValue())).intValue() > maxDaysInMonth(year, month)) numberModel.setValue(new Integer(maxDaysInMonth(year, month))); // Get the current day int day = ((Integer)spinnerDay.getValue()).intValue(); // Set a new date in the date spinner spinnerDate.setValue( new GregorianCalendar(year, month, day).getTime()); } /** Return the maximum number of days in a month. For example, Feb 2004 has 29 days. */ private int maxDaysInMonth(int year, int month) { Calendar calendar = new GregorianCalendar(year, month, 1); return calendar.getActualMaximum(Calendar.DAY_OF_MONTH); } public static void main(String[] args) { javax.swing.JFrame frame = new javax.swing.JFrame( "Exercise24_1"); Exercise24_1 applet = new Exercise24_1(); // Add the applet instance to the frame frame.getContentPane().add(applet, java.awt.BorderLayout.CENTER); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Invoke init and start applet.init(); applet.start(); // Display the frame frame.pack(); frame.setVisible(true); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -