王朝网络
分享
 
 
 

改写的基于SWING的日期选择控件

王朝system·作者佚名  2008-05-31
宽屏版  字体: |||超大  

上次公司需要,搞了一个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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有