上次公司需要,搞了一个SWING的Aapplication的DEMO,重新弄了一般SWING,可惜最后无疾而终,可悲..... 最近离职,把以前的东西整理了一下,觉得多少有点用处,写下算是悼念吧! 这是其中日期选择控件的代码,改编自网上某个程序(记不得了),界面如下所示:  源代码: //DatePicker.Java package com.kxsoft.component; import java.awt.*; import java.awt.event.*; import java.util.GregorianCalendar; import java.util.Date; import java.util.Calendar; import java.text.DateFormat; import java.text.FieldPosition; import javax.swing.*; import javax.swing.plaf.BorderUIResource; public final class DatePicker extends JPanel { private static final long serialVersionUID = 1L; private static final int startX = 10; private static final int startY = 60; private static final Font smallFont = new Font("Dialog", Font.PLAIN, 10); private static final Font largeFont = new Font("Dialog", Font.PLAIN, 12); private static final Insets insets = new Insets(2, 2, 2, 2); private static final Color highlight = new Color(255, 255, 204); private static final Color white = new Color(255, 255, 255); private static final Color gray = new Color(204, 204, 204); private Component selectedDay = null; private GregorianCalendar selectedDate = null; private GregorianCalendar originalDate = null; private boolean hideOnSelect = true; private final JButton backButton = new JButton(); private final JLabel monthAndYear = new JLabel(); private final JButton forwardButton = new JButton(); private final JLabel[] dayHeadings = new JLabel[]{ new JLabel("日"), new JLabel("一"), new JLabel("二"), new JLabel("三"), new JLabel("四"), new JLabel("五"), new JLabel("六")}; private final JLabel[][] daysInMonth = new JLabel[][]{ {new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel()}, {new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel()}, {new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel()}, {new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel()}, {new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel()}, {new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel(), new JLabel()} }; private final JButton todayButton = new JButton(); private final JButton cancelButton = new JButton(); public DatePicker() { super(); selectedDate = getToday(); init(); } public DatePicker(final Date initialDate) { super(); if (null == initialDate) selectedDate = getToday(); else (selectedDate = new GregorianCalendar()).setTime(initialDate); originalDate = new GregorianCalendar( selectedDate.get(Calendar.YEAR), selectedDate.get(Calendar.MONTH), selectedDate.get(Calendar.DATE)); init(); } public boolean isHideOnSelect() { return hideOnSelect; } public void setHideOnSelect(final boolean hideOnSelect) { if (this.hideOnSelect != hideOnSelect) { this.hideOnSelect = hideOnSelect; initButtons(false); } } public Date getDate() { if (null != selectedDate) return selectedDate.getTime(); return null; } private void init() { setLayout(new AbsoluteLayout()); this.setMinimumSize(new Dimension(161, 226)); this.setMaximumSize(getMinimumSize()); this.setPreferredSize(getMinimumSize()); this.setBorder(new BorderUIResource.EtchedBorderUIResource()); backButton.setFont(smallFont); backButton.setText("<"); backButton.setMargin(insets); backButton.setDefaultCapable(false); backButton.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent evt) { onBackClicked(evt); } }); add(backButton, new AbsoluteConstraints(10, 10, 20, 20)); monthAndYear.setFont(largeFont); monthAndYear.setHorizontalAlignment(JTextField.CENTER); monthAndYear.setText(formatDateText(selectedDate.getTime())); add(monthAndYear, new AbsoluteConstraints(30, 10, 100, 20)); forwardButton.setFont(smallFont); forwardButton.setText(">"); forwardButton.setMargin(insets); forwardButton.setDefaultCapable(false); forwardButton.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent evt) { onForwardClicked(evt); } }); add(forwardButton, new AbsoluteConstraints(130, 10, 20, 20)); int x = startX; for (int ii = 0; ii < dayHeadings.length; ii++) { dayHeadings[ii].setOpaque(true); dayHeadings[ii].setBackground(Color.LIGHT_GRAY); dayHeadings[ii].setForeground(Color.WHITE); dayHeadings[ii].setHorizontalAlignment(JLabel.CENTER); add(dayHeadings[ii], new AbsoluteConstraints(x, 40, 21, 21)); x += 20; } x = startX; int y = startY; for (int ii = 0; ii < daysInMonth.length; ii++) { for (int jj = 0; jj < daysInMonth[ii].length; jj++) { daysInMonth[ii][jj].setOpaque(true); daysInMonth[ii][jj].setBackground(white); daysInMonth[ii][jj].setFont(smallFont); daysInMonth[ii][jj].setHorizontalAlignment(JLabel.CENTER); daysInMonth[ii][jj].setText(""); daysInMonth[ii][jj].addMouseListener(new MouseAdapter() { public void mouseClicked(final MouseEvent evt) { onDayClicked(evt); } }); add(daysInMonth[ii][jj], new AbsoluteConstraints(x, y, 21, 21)); x += 20; } x = startX; y += 20; } initButtons(true); calculateCalendar(); } private void initButtons(final boolean firstTime) { if (firstTime) { final Dimension buttonSize = new Dimension(68, 24); todayButton.setText("今天"); todayButton.setMargin(insets); todayButton.setMaximumSize(buttonSize); todayButton.setMinimumSize(buttonSize); todayButton.setPreferredSize(buttonSize); todayButton.setDefaultCapable(true); todayButton.setSelected(true); todayButton.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent evt) { onToday(evt); } }); cancelButton.setText("取消"); cancelButton.setMargin(insets); cancelButton.setMaximumSize(buttonSize); cancelButton.setMinimumSize(buttonSize); cancelButton.setPreferredSize(buttonSize); cancelButton.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent evt) { onCancel(evt); } }); } else { this.remove(todayButton); this.remove(cancelButton); } if (hideOnSelect) { add(todayButton, new Absolut
|