java 日历控件_java swing 日历控件怎么实现 最好是源码

展开全部

70d7863529ecb08879ffbb6f0201789b.png

源代码:

e69da5e887aa3231313335323631343130323136353331333330363864//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[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 

for (int jj = 0; 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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值