?? dateselecter.java
字號:
package com.ciash.common.gui;
import java.awt.Rectangle;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Calendar;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* 一個日期選擇控件,可以選擇指定的年月日,并可以返回一個Calendar實例
* <p>
* 注意:當選擇的任一數值為--時,Calendar實例將返回null
*/
public class DateSelecter extends JPanel {
private static final long serialVersionUID = -5110694109466038061L;
private JComboBox year = new JComboBox();
private JComboBox month = new JComboBox();
private JComboBox day = new JComboBox();
private JLabel yearLabel = new JLabel();
private JLabel monthLabel = new JLabel();
private JLabel dayLabel = new JLabel();
Calendar date = Calendar.getInstance();
private final static String NULL_ITEM = "--";
private boolean isEditable = true;
public DateSelecter() {
Calendar date = Calendar.getInstance();
jbInit();
int y = date.get(Calendar.YEAR) - 49;
int c = 100;
if (y >= 0 && c >= 1) {
resetYearComponent(y, c);
resetMonthComponent();
resetDayComponent(getDaysOfMonth(c, 12));
setSelect(0);
}
}
public DateSelecter(int baseYear, int years) {
jbInit();
if (baseYear >= 0 && years >= 1) {
resetYearComponent(baseYear, years);
resetMonthComponent();
resetDayComponent(getDaysOfMonth(baseYear, 12));
setSelect(0);
}
}
private void jbInit() {
yearLabel.setText(ChangeListener.YEAR);
yearLabel.setBounds(new Rectangle(92, 2, 24, 21));
monthLabel.setText(ChangeListener.MONTH);
monthLabel.setBounds(new Rectangle(176, 2, 21, 21));
dayLabel.setText(ChangeListener.DAY);
dayLabel.setBounds(new Rectangle(253, 2, 21, 21));
this.setLayout(null);
this.setOpaque(true);
day.setBounds(new Rectangle(197, 0, 56, 26));
month.setBounds(new Rectangle(116, 0, 60, 26));
year.setBounds(new Rectangle(0, 1, 92, 25));
this.add(year, null);
this.add(yearLabel, null);
this.add(month, null);
this.add(monthLabel, null);
this.add(day, null);
this.add(dayLabel, null);
ChangeListener listener = new ChangeListener();
year.addItemListener(listener);
month.addItemListener(listener);
day.addItemListener(listener);
}
public void setCalendar(Calendar date) {
this.date = date;
if (date != null) {
String y = Integer.toString(date.get(Calendar.YEAR));
String m = Integer.toString(date.get(Calendar.MONTH) + 1);
String d = Integer.toString(date.get(Calendar.DATE));
year.setSelectedItem(y);
month.setSelectedItem(m);
day.setSelectedItem(d);
} else {
year.setSelectedItem(NULL_ITEM);
month.setSelectedItem(NULL_ITEM);
day.setSelectedItem(NULL_ITEM);
}
}
public Calendar getCalendar() {
if (date == null) {
return null;
}
return (Calendar) date.clone();
}
private void setDate(int y, int m, int d) {
if (y == -1 || m == -1 || d == -1) {
date = null;
} else {
date = Calendar.getInstance();
date.set(y, m, d);
}
}
private void resetYearComponent(int baseYear, int years) {
year.addItem(NULL_ITEM);
for (int i = 0; i < years; i++) {
year.addItem((i + baseYear) + "");
}
}
private void resetMonthComponent() {
month.removeAllItems();
month.addItem(NULL_ITEM);
for (int i = 1; i <= 12; i++) {
month.addItem(i + "");
}
}
private void resetDayComponent(int date) {
int index = day.getSelectedIndex();
day.removeAllItems();
day.addItem(NULL_ITEM);
for (int i = 1; i <= date; i++) {
day.addItem(i + "");
}
setSelect(index);
}
private void setSelect(int index) {
if (index >= day.getItemCount()) {
day.setSelectedIndex(day.getItemCount() - 1);
} else {
day.setSelectedIndex(index);
}
}
private class ChangeListener
implements ItemListener {
public final static String YEAR = "年";
public final static String MONTH = "月";
public final static String DAY = "日";
public void itemStateChanged(ItemEvent e) {
try {
setDay(e);
} catch (NumberFormatException ex) {
setDate(-1, -1, -1);
return;
}
}
private void setDay(ItemEvent e) throws NumberFormatException {
int y = Integer.parseInt(year.getSelectedItem().toString());
int m = Integer.parseInt(month.getSelectedItem().toString());
int d = getDaysOfMonth(y, m);
if (!e.getSource().equals(day)) {
day.removeItemListener(this);
resetDayComponent(d);
day.addItemListener(this);
}
d = Integer.parseInt(day.getSelectedItem().toString());
setDate(y, m, d);
}
}
private static int getDaysOfMonth(int year, int month) {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 2:
return lanurDays(year);
case 4:
case 6:
case 9:
case 11:
return 30;
default:
return -1;
}
}
private static int lanurDays(int year) {
if (year % 100 == 0 && year % 400 == 0 || year % 4 == 0)
return 29;
else
return 28;
}
public void setEditable(boolean isEditable) {
this.isEditable = isEditable;
year.setEnabled(isEditable);
month.setEnabled(isEditable);
day.setEnabled(isEditable);
}
public boolean isEditable() {
return isEditable;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -