java写一个日期选择器_【运用Java应用程序显示交互日历,至少包含日期选择日期输入两个功能】(转)...

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.text.SimpleDateFormat;

import java.util.*;

public class CalenderTrain extends JFrame implements ActionListener

{

JComboBox Month = new JComboBox(); // 月份下拉列表框

JComboBox Year = new JComboBox(); // 年份下拉列表框

JLabel Year_l = new JLabel("年份:"); // 定义标签

JLabel Month_l = new JLabel("月份:"); // 定义标签

JButton[] button_day = new JButton[49]; //

定义一个数组用来存放日期

JButton button_jump = new JButton("日期跳转"); // 现实选择日期

JButton button_today = new JButton("现在日期"); //

显示今天日期按钮

boolean bool = false;

String year_str = null; // 存放年份

String month_str = null; // 存放月份

JPanel pane_ym = new JPanel(); // 放置下拉列表框和控制按钮面板

JPanel pane_day = new JPanel(); // 放置日期面板

JPanel pane_parent = new JPanel(); // 放置以上两个面板

//

定义方法绘制面板

Calendar cal; // 日历对象

Date

now_date;// 当前 日期

int

now_year;// 当前年份值

int

now_month; // 当前月份值(当前月份-1)

public CalenderTrain() {

super("JAVA日历程序"); // 设定面板标题

// ---以下几行使得关闭面板时退出程序

setDefaultCloseOperation(DISPOSE_ON_CLOSE);

addWindowListener(new WindowAdapter() {

public void windowClose(WindowEvent e) {

System.exit(0);

}

});

setResizable(false); // 面板的大小不能变化

// 设定年月

cal = Calendar.getInstance();

now_year = cal.get(Calendar.YEAR); // 获取年份值

now_month = cal.get(Calendar.MONTH); //

获取月份值(当前月份-1)

for (int i = now_year - 10; i <= now_year + 20; i++)

{

Year.addItem(i + "");

}

for (int i = 1; i < 13; i++) {

Month.addItem(i + "");

}

Year.setSelectedIndex(10); // 设定年份下拉列表为当前年份

pane_ym.add(Year_l); // 添加年份标签

pane_ym.add(Year); // 添加年份下拉列表框

Month.setSelectedIndex(now_month); // 设定月份下拉列表为当前月份

pane_ym.add(Month_l); // 添加月份标签

pane_ym.add(Month); // 添加月份下拉列表框

pane_ym.add(button_jump); // 添加跳转按钮

pane_ym.add(button_today); // 添加“现在日期”按钮

button_jump.addActionListener(this); // 跳转按钮添加 监听事件

button_today.addActionListener(this); //

“现在日期”按钮添加监听事件

// 年月设定结束

// 初始化日期按钮并绘制

pane_day.setLayout(new GridLayout(7, 7));

for (int i = 0; i < 49; i++) {

button_day[i] = new JButton(" ");

pane_day.add(button_day[i]);

}

String week[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"

};

// --将星期添加到前7个按钮中

for (int i = 0; i < 7; i++) {

button_day[i].setText(week[i]);

}

pane_parent.setLayout(new BorderLayout()); //

设定布局管理器

pane_parent.add(pane_day, BorderLayout.SOUTH);

pane_parent.add(pane_ym, BorderLayout.NORTH);

setContentPane(pane_parent);

pack();

this.setVisible(true);

this.setDay(); // 调用setDay()方法

}

//

SET DAY 方法,显示日期

void

setDay() {

if (bool) {

year_str = Integer.toString(now_year);

month_str = Integer.toString(now_month + 1);

} else {

year_str = Year.getSelectedItem().toString();

month_str = Month.getSelectedItem().toString();

}

int year_sel = Integer.parseInt(year_str); // 获得年份值

int month_sel = Integer.parseInt(month_str);

Calendar dt = Calendar.getInstance(TimeZone.getDefault());//

获取当前时区的一个日历对象

dt.clear();// 将日历中信息清空

dt.set(year_sel, month_sel-1, 1);//Calender 0表示 一月份

int day = 0; // day中存放某个月份的天数

// 以下根据月份判断当月有多少天,其中二月份要判断是否是闰年

if (month_sel == 1 || month_sel == 3 || month_sel ==

5

|| month_sel == 7 || month_sel == 8 || month_sel ==

10

|| month_sel == 12) {

day = 31;

} else if (month_sel == 4 || month_sel == 6 || month_sel ==

9

|| month_sel == 11) {

day = 30;

} else {

GregorianCalendar cal = new GregorianCalendar(year_sel,

month_sel,

1);

//

创建一个Calendar实例,注意GregorianCalendar的月是基于0的,此处和月份无关,

// 所以只要年份无误即可

if (cal.isLeapYear(year_sel)) {// 判断是否闰年

day = 29;

} else {

day = 28;

}

}

int day_week = 0; // 用来存放某个月的第一天是星期几的数值

int first = dt.get(Calendar.DAY_OF_WEEK);

// 1,2,3,4,5,6,7,分别表示星期日 一

二三 四

五六

// System.out.println("first:" + first);

day_week = 7 + dt.get(Calendar.DAY_OF_WEEK)-1;

System.out.println(year_sel+"年"+month_sel+"月份第一天是星期:" +

first);

int count = 1;

for (int i = day_week; i < day_week + day; count++, i++)

{

button_day[i].setEnabled(true);

button_day[i].setForeground(Color.black);

button_day[i].setText(count + "");

}

// --对于没有日期数值显示的按钮进行置空处理

// 第一天前面的按钮置空

for (int i = 7; i < day_week; i++) {

button_day[i].setText("");

button_day[i].setEnabled(false);

} // 最后一天后面的按钮置空

for (int i = day_week + day; i < 49; i++) {

button_day[i].setText("");

button_day[i].setEnabled(false);

}

}

//

点击按钮产生的效果

public void actionPerformed(ActionEvent e) {

if (e.getSource() == button_jump) {

bool = false;

this.setDay(); // 如果点击跳转按钮就调用setDay()方法重新绘制按钮

} else if (e.getSource() == button_today) {

bool = true;

Month.setSelectedIndex(now_month);// 将月份置为当前月份

System.out.println("当前月份 =:" + now_month);

Year.setSelectedIndex(10); // 将年份置为当前年份

this.setDay(); // 如果点击现在日期按钮,得到今天的日期

}

}

public static void main(String[] args) {

CalenderTrain ct = new CalenderTrain();

}

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值