1.主程序:
package edu.test.swing;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.text.DateFormatSymbols;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Dictionary;
import java.util.GregorianCalendar;
import java.util.Hashtable;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class DateSilder extends JFrame {
/**
*
*/
private static final long serialVersionUID = -5326757798867881120L;
private JPanel contentPane;
private JSlider yearSlider;
private JSlider monthSlider;
private JSlider daySlider;
private JLabel dateLabel;
private Calendar calendar = new GregorianCalendar(); //日期类
private ChangeListener cl = new DateListener(); //变化侦听器
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy\u5E74MM\u6708dd\u65E5");
/**
* Launch the application.
*/
public static void main(String[] args) {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Throwable e) {
e.printStackTrace();
}
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
DateSilder frame = new DateSilder();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public DateSilder() {
addWindowListener(new WindowAdapter() {
@Override
public void windowActivated(WindowEvent e) {
do_this_windowActivated(e);
}
});
setTitle("Swing日期选定");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 600, 500);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new GridLayout(5, 1, 5, 5));
JPanel panel1 = new JPanel();
panel1.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null), "Choose the date:", TitledBorder.LEADING, TitledBorder.TOP, null,
new Color(59, 59, 59)));
contentPane.add(panel1);
dateLabel = new JLabel("");
dateLabel.setFont(new Font("微软雅黑", Font.PLAIN, 20));
panel1.add(dateLabel);
JPanel panel2 = new JPanel();
panel2.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null), "Year", TitledBorder.LEADING, TitledBorder.TOP, null, null));
contentPane.add(panel2);
panel2.setLayout(new BorderLayout(0, 0));
yearSlider = new JSlider();
yearSlider.setSnapToTicks(true);
yearSlider.setPaintTicks(true);
yearSlider.setPaintLabels(true);
yearSlider.setFont(new Font("微软雅黑", Font.PLAIN, 14));
panel2.add(yearSlider);
JPanel panel3 = new JPanel();
panel3.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null), "month", TitledBorder.LEADING, TitledBorder.TOP, null, null));
contentPane.add(panel3);
panel3.setLayout(new BorderLayout(0, 0));
monthSlider = new JSlider();
monthSlider.setSnapToTicks(true);
monthSlider.setPaintTicks(true);
monthSlider.setPaintLabels(true);
monthSlider.setFont(new Font("微软雅黑", Font.PLAIN, 14));
panel3.add(monthSlider);
JPanel panel4 = new JPanel();
panel4.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null), "day", TitledBorder.LEADING, TitledBorder.TOP, null, null));
contentPane.add(panel4);
panel4.setLayout(new BorderLayout(0, 0));
daySlider = new JSlider();
daySlider.setSnapToTicks(true);
daySlider.setPaintTicks(true);
daySlider.setPaintLabels(true);
daySlider.setFont(new Font("微软雅黑", Font.PLAIN, 14));
panel4.add(daySlider);
JPanel panel5 = new JPanel();
panel5.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null), "确定打印", TitledBorder.LEADING, TitledBorder.TOP, null, null));
contentPane.add(panel5);
panel5.setLayout(new BorderLayout(0, 0));
JButton okbutton = new JButton("控制台打印日期");
okbutton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println(dateFormat.format(calendar.getTime()));
}
});
panel5.add(okbutton);
}
protected void do_this_windowActivated(WindowEvent e) {
yearSlider.setMaximum(2020);
yearSlider.setMinimum(2000);
yearSlider.setMajorTickSpacing(5);
yearSlider.setMinorTickSpacing(1);
yearSlider.setValue(calendar.get(Calendar.YEAR));
Dictionary<Integer, Component> yearLabel = new Hashtable<Integer, Component>();
yearLabel.put(2000, new JLabel("2000年"));
yearLabel.put(2005, new JLabel("2005年"));
yearLabel.put(2010, new JLabel("2010年"));
yearLabel.put(2015, new JLabel("2015年"));
yearLabel.put(2020, new JLabel("2020年"));
yearSlider.setLabelTable(yearLabel);
yearSlider.addChangeListener(cl);
monthSlider.setMaximum(12);
monthSlider.setMinimum(1);
monthSlider.setMajorTickSpacing(1);
monthSlider.setValue(calendar.get(Calendar.MONTH) + 1);
String[] months = (new DateFormatSymbols()).getShortMonths();
Dictionary<Integer, Component> monthLabel = new Hashtable<Integer, Component>(12);
for (int i = 0; i < 12; i++) {
monthLabel.put(i + 1, new JLabel(months[i]));
}
monthSlider.setLabelTable(monthLabel);
monthSlider.addChangeListener(cl);
daySlider.setMaximum(calendar.getMaximum(Calendar.DAY_OF_MONTH));
daySlider.setMinimum(1);
daySlider.setMajorTickSpacing(5);
daySlider.setMinorTickSpacing(1);
daySlider.setValue(calendar.get(Calendar.DATE));
daySlider.addChangeListener(cl);
dateLabel.setText(dateFormat.format(new Date())); //获取当前时间
}
2.测试示例:
3.技术要点:
4..打印输出:
5.JSlider 是一个让用户以图形的方式在有界区域内通过滑块来选择值的空间。
protected void do_this_windowActivated(WindowEvent e) {
yearSlider.setMaximum(2020);
yearSlider.setMinimum(2000);
yearSlider.setMajorTickSpacing(5);
yearSlider.setMinorTickSpacing(1);
yearSlider.setValue(calendar.get(Calendar.YEAR));
Dictionary<Integer, Component> yearLabel = new Hashtable<Integer, Component>();
yearLabel.put(2000, new JLabel("2000年"));
yearLabel.put(2005, new JLabel("2005年"));
yearLabel.put(2010, new JLabel("2010年"));
yearLabel.put(2015, new JLabel("2015年"));
yearLabel.put(2020, new JLabel("2020年"));
yearSlider.setLabelTable(yearLabel);
yearSlider.addChangeListener(cl);
monthSlider.setMaximum(12);
monthSlider.setMinimum(1);
monthSlider.setMajorTickSpacing(1);
monthSlider.setValue(calendar.get(Calendar.MONTH) + 1);
String[] months = (new DateFormatSymbols()).getShortMonths();
Dictionary<Integer, Component> monthLabel = new Hashtable<Integer, Component>(12);
for (int i = 0; i < 12; i++) {
monthLabel.put(i + 1, new JLabel(months[i]));
}
monthSlider.setLabelTable(monthLabel);
monthSlider.addChangeListener(cl);
daySlider.setMaximum(calendar.getMaximum(Calendar.DAY_OF_MONTH));
daySlider.setMinimum(1);
daySlider.setMajorTickSpacing(5);
daySlider.setMinorTickSpacing(1);
daySlider.setValue(calendar.get(Calendar.DATE));
daySlider.addChangeListener(cl);
dateLabel.setText(dateFormat.format(new Date())); //获取当前时间
}
6.