📄 datebutton.java
字号:
package Default;
import java.util.Date;
import java.util.Calendar;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.awt.Color;
import java.awt.Font;
import java.awt.Point;
import java.awt.Dimension;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
// import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JSpinner;
import javax.swing.JSpinner.NumberEditor;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingUtilities;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import javax.swing.border.LineBorder;
public class DateButton extends JButton {
static DateChooser dateChooser = null;
// static DateChooser dateChooser = new DateChooser();
private String preLabel = "";
// ----------------------------------------------------------------------------------------------------------------------------------------
public DateButton()
{
this(getNowDate());
}
// ----------------------------------------------------------------------------------------------------------------------------------------
public DateButton(SimpleDateFormat df, String dateString)
{
this();
setText(df, dateString);
}
// ----------------------------------------------------------------------------------------------------------------------------------------
public DateButton(Date date)
{
this("", date);
}
// ----------------------------------------------------------------------------------------------------------------------------------------
public DateButton(String preLabel, Date date)
{
if (preLabel != null) this.preLabel = preLabel;
setDate(date);
setBorder(null);
setCursor(new Cursor(Cursor.HAND_CURSOR));
super.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (dateChooser == null) dateChooser = new DateChooser();
Point p = getLocationOnScreen();
p.y = p.y + 30;
dateChooser.showDateChooser(p);
}
});
}
// ----------------------------------------------------------------------------------------------------------------------------------------
private static Date getNowDate() {
return Calendar.getInstance().getTime();
}
// ----------------------------------------------------------------------------------------------------------------------------------------
public static SimpleDateFormat getDefaultDateFormat() {
return new SimpleDateFormat("yyyy年MM月dd日 kk时mm分");
}
// ----------------------------------------------------------------------------------------------------------------------------------------
public String getNowTime()
{
// return new SimpleDateFormat("yyyy年MM月dd日 kk时mm分").format(getNowDate());
return this.getText();
}
// ----------------------------------------------------------------------------------------------------------------------------------------
// 覆盖父类的方法
public void setText(String s) {
Date date;
try
{
date = getDefaultDateFormat().parse(s);
} catch (ParseException e)
{
date = getNowDate();
}
setDate(date);
}
// ----------------------------------------------------------------------------------------------------------------------------------------
public void setText(SimpleDateFormat df, String s) {
Date date;
try
{
date = df.parse(s);
} catch (ParseException e)
{
date = getNowDate();
}
setDate(date);
}
// ----------------------------------------------------------------------------------------------------------------------------------------
public void setDate(Date date) {
super.setText(preLabel + getDefaultDateFormat().format(date));
}
// ----------------------------------------------------------------------------------------------------------------------------------------
public Date getDate() {
String dateString = getText().substring(preLabel.length());
try
{
return getDefaultDateFormat().parse(dateString);
} catch (ParseException e)
{
return getNowDate();
}
}
// ----------------------------------------------------------------------------------------------------------------------------------------
// 覆盖父类的方法使之无效
public void addActionListener(ActionListener listener) {
}
// ----------------------------------------------------------------------------------------------------------------------------------------
class DateChooser extends JPanel implements ActionListener,
ChangeListener {
int startYear = 1980; // 默认【最小】显示年份
int lastYear = 2050; // 默认【最大】显示年份
int width = 300; // 界面宽度
int height = 200; // 界面高度
Color backGroundColor = Color.gray; // 底色
// 月历表格配色----------------//
Color palletTableColor = Color.white; // 日历表底色
Color todayBackColor = Color.orange; // 今天背景色
Color weekFontColor = Color.blue; // 星期文字色
Color dateFontColor = Color.black; // 日期文字色
Color weekendFontColor = Color.red; // 周末文字色
// 控制条配色------------------//
Color controlLineColor = Color.pink; // 控制条底色
Color controlTextColor = Color.white; // 控制条标签文字色
Color rbFontColor = Color.white; // RoundBox文字色
Color rbBorderColor = Color.red; // RoundBox边框色
Color rbButtonColor = Color.pink; // RoundBox按钮色
Color rbBtFontColor = Color.red; // RoundBox按钮文字色
JDialog dialog;
JSpinner yearSpin;
JSpinner monthSpin;
JSpinner daySpin;
JSpinner hourSpin;
JSpinner miniteSpin;
JButton[][] daysButton = new JButton[6][7];
// ----------------------------------------------------------------------------------------------------------------------------------------
DateChooser()
{
setLayout(new BorderLayout());
setBorder(new LineBorder(backGroundColor, 2));
setBackground(backGroundColor);
JPanel topYearAndMonth = createYearAndMonthPanal();
add(topYearAndMonth, BorderLayout.NORTH);
JPanel centerWeekAndDay = createWeekAndDayPanal();
add(centerWeekAndDay, BorderLayout.CENTER);
}
// ----------------------------------------------------------------------------------------------------------------------------------------
private JPanel createYearAndMonthPanal() {
Calendar c = getCalendar();
int currentYear = c.get(Calendar.YEAR);
int currentMonth = c.get(Calendar.MONTH) + 1;
int currentDay=c.get(Calendar.DAY_OF_MONTH);
int currentHour = c.get(Calendar.HOUR_OF_DAY);
int currentMinite=c.get(Calendar.MINUTE);
JPanel result = new JPanel();
result.setLayout(new FlowLayout());
result.setBackground(controlLineColor);
//------------------------------------------------------------------------------------
yearSpin = new JSpinner(new SpinnerNumberModel(currentYear,
startYear, lastYear, 1));
yearSpin.setPreferredSize(new Dimension(48, 20));
yearSpin.setName("Year");
yearSpin.setEditor(new JSpinner.NumberEditor(yearSpin, "####"));
yearSpin.addChangeListener(this);
result.add(yearSpin);
JLabel yearLabel = new JLabel("年");
yearLabel.setForeground(controlTextColor);
result.add(yearLabel);
//------------------------------------------------------------------------------------
monthSpin = new JSpinner(new SpinnerNumberModel(currentMonth, 1,
12, 1));
monthSpin.setPreferredSize(new Dimension(35, 20));
monthSpin.setName("Month");
monthSpin.addChangeListener(this);
result.add(monthSpin);
JLabel monthLabel = new JLabel("月");
monthLabel.setForeground(controlTextColor);
result.add(monthLabel);
// ------------------------------------------------------------------------------------
daySpin = new JSpinner(new SpinnerNumberModel(currentDay, 1,
31, 1));
daySpin.setPreferredSize(new Dimension(35, 20));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -