java代码怎么写日历 用java写日历

用java写个日历程序怎么写,请给出详细步骤,谢谢

随便做了一个,其实一楼网友说的判断哪些30天,是否闰年什么的没必要,看代码:

东山网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站建设等网站项目制作,到程序开发,运营维护。创新互联2013年至今到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。

package com.baidu.calendar;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.FlowLayout;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.event.ItemEvent;

import java.awt.event.ItemListener;

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.border.CompoundBorder;

import javax.swing.border.EmptyBorder;

import javax.swing.border.LineBorder;

public class CalendarInterface extends JFrame {

private static final long serialVersionUID = 1L;

private JComboBox yearBox, monthBox;

private static final int YEAR_RANGE = 50; // 年份范围,即往前往后各推多少年

private JPanel topPane, contentPane;

private JPanel bottomPane, bottomTopPane, mainPane;

private JLabel dateLabel;

private boolean init = false;

private Calendar cal;

private static final Calendar NOW = Calendar.getInstance();

private static final String[] DAY_OF_WEEK = {"星期日弯让", "星期一", "星期二",

"星期三"虚磨, "星期四", "星期五", "星期六"};

private DateFormat df = new SimpleDateFormat("yyyy年MM月");

private static final Color FONT_GRAY = new Color(0xaa, 0xaa, 0xaa);

private static final int DATE_GRAY = -1;

private static final int DATE_RED 差闹斗= 1;

private static final int DATE_BLACK = 0;

public CalendarInterface() {

super("日历");

cal = Calendar.getInstance();

cal.setFirstDayOfWeek(Calendar.SUNDAY);

}

public void launch() {

setVisible(true);

setSize(600, 450);

setDefaultCloseOperation(EXIT_ON_CLOSE);

// 主面板

contentPane = new JPanel(new BorderLayout());

contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

contentPane.setBackground(Color.WHITE);

// 顶部选择日期和月份的区域

topPane = new JPanel(new FlowLayout(FlowLayout.CENTER, 50, 0)); // 居中对齐,控件间隔50px

topPane.setBorder(new EmptyBorder(0, 0, 10, 0)); // 底部空出10px

topPane.setBackground(Color.WHITE);

// 底部显示星期条和日历列表区域

bottomPane = new JPanel(new BorderLayout());

bottomPane.setBorder(new LineBorder(Color.BLACK, 1));

// 星期条

bottomTopPane = new JPanel(new GridLayout(1, 7));

bottomTopPane.setBackground(new Color(0x55, 0x55, 0x55));

// 日期列表

mainPane = new JPanel();

mainPane.setLayout(new GridLayout(0, 7)); // 列数为7,行数自动填充

for(int i = Calendar.SUNDAY; i = Calendar.SATURDAY; i ++) {

bottomTopPane.add(createDay(DAY_OF_WEEK[i - 1]));

}

bottomPane.add(bottomTopPane, BorderLayout.NORTH); // 星期栏放在顶部

// 年份下拉列表

yearBox = new JComboBox();

int currentYear = cal.get(Calendar.YEAR);

// 年份范围为往前往后各推50年

for(int i = currentYear - YEAR_RANGE; i  currentYear + YEAR_RANGE + 1; i ++) {

yearBox.addItem(i);

}

yearBox.addItemListener(new ItemListener() {

@Override

public void itemStateChanged(ItemEvent e) {

if(ItemEvent.SELECTED == e.getStateChange()) {

reset(); // 选择后刷新布局

}

}

});

yearBox.setSelectedIndex(YEAR_RANGE); // 默认选中当前年份

String months[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"};

// 月份下拉列表

monthBox = new JComboBox(months);

monthBox.addItemListener(new ItemListener() {

@Override

public void itemStateChanged(ItemEvent e) {

if(ItemEvent.SELECTED == e.getStateChange()) {

reset(); //刷新布局

}

}

});

monthBox.setSelectedIndex(cal.get(Calendar.MONTH)); // 选择当前月份

// 显示当前年月的控件

this.dateLabel = new JLabel(df.format(cal.getTime()));

topPane.add(yearBox);

topPane.add(monthBox);

topPane.add(dateLabel);

contentPane.add(topPane, BorderLayout.NORTH);

bottomPane.add(mainPane, BorderLayout.CENTER);

contentPane.add(bottomPane, BorderLayout.CENTER);

setContentPane(contentPane);

validate();

init = true; // 初始化完成

reset(); // 刷新界面

setLocationRelativeTo(null); // 居中显示

}

public static void main(String[] args) {

new CalendarInterface().launch();

}

private void reset() { // 每次年份或月份改变后则日历重新排列

if(!init) { // 若未初始化则返回,避免设置默认年月时调用此方法出错

return;

}

int year = (Integer) yearBox.getSelectedItem();

int month = Integer.parseInt((String) monthBox.getSelectedItem());

// 将日期设置为本月第一天

cal.set(Calendar.YEAR, year);

cal.set(Calendar.MONTH, month - 1);

cal.set(Calendar.DATE, 1);

dateLabel.setText(df.format(cal.getTime())); // 显示年月

mainPane.removeAll(); // 清空日历列表

// 判断本月第一天是星期几,在第一天之前增加空的日历

int startDayOfWeek = cal.get(Calendar.DAY_OF_WEEK);

int i;

// 先设置为本周属于上个月的几天,置灰显示

cal.add(Calendar.DATE, -(startDayOfWeek - Calendar.SUNDAY) - 1);

for(i = Calendar.SUNDAY; i  startDayOfWeek; i ++) {

cal.add(Calendar.DATE, 1);

int date = cal.get(Calendar.DATE);

mainPane.add(createDate(Integer.toString(date), DATE_GRAY));

}

i = startDayOfWeek;

// 重新初始化为本月第一天

cal.set(Calendar.MONTH, month - 1);

cal.set(Calendar.DATE, 1);

int maxDate = cal.getActualMaximum(Calendar.DATE); // 本月最多的天数(不用再去判断是否闰年了)

for(int j = 1; j = maxDate; j ++) {

cal.set(Calendar.DATE, j); // 日期一直自增,用来判断是否是今天

JLabel jlDate = null;

if(isToday()) { // 是今天则高亮显示

jlDate = createDate(Integer.toString(j), DATE_RED);

} else { // 不是今天则显示为普通颜色

jlDate = createDate(Integer.toString(j));

}

mainPane.add(jlDate);

}

// 最后一周把不属于本月的几天用灰色控件填充

int lastDay = cal.get(Calendar.DAY_OF_WEEK);

for(i = lastDay; i  Calendar.SATURDAY; i ++) {

cal.add(Calendar.DATE, 1);

int date = cal.get(Calendar.DATE);

mainPane.add(createDate(Integer.toString(date), DATE_GRAY));

}

mainPane.validate();

}

private JLabel createDate(String date) {

return createDate(date, DATE_BLACK);

}

// 创建日期控件

private JLabel createDate(String date, int dateColor) {

JLabel label = new JLabel(date, JLabel.CENTER);

CompoundBorder border = new CompoundBorder(

new LineBorder(Color.WHITE, 1),

new EmptyBorder(10, 10, 10, 10));

label.setBorder(border);

Font font = new Font("Arial", Font.BOLD, 30);

if(DATE_GRAY == dateColor) { // 如果不是本月则文字置灰

label.setForeground(FONT_GRAY);

} else if(DATE_RED == dateColor) { // 如果是今天则高亮显示

label.setForeground(Color.RED);

}

label.setFont(font);

return label;

}

// 创建星期几的横条

private JLabel createDay(String day) {

JLabel jlDay = new JLabel(day, JLabel.CENTER);

jlDay.setBorder(new EmptyBorder(5, 5, 5, 5));

jlDay.setBackground(Color.GRAY);

jlDay.setForeground(Color.WHITE);

return jlDay;

}

// 判断是否今天

private boolean isToday() {

return cal.get(Calendar.YEAR) == NOW.get(Calendar.YEAR)

 cal.get(Calendar.MONTH) == NOW.get(Calendar.MONTH)

 cal.get(Calendar.DATE) == NOW.get(Calendar.DATE);

}

}

java编写日历

我给你贴上我在java核心技术中看到的代码吧,当然没有输入年份和月份,是按照当前时间创建的,写有我写的注释,应该能看的懂

/*

* 2012年5月13日10:37:58

* 日历程序

* Function:

* 显示当前月份的日历

* 总结

* 1. 0-11分别代表1-12月

* 1-7分别代表周日-周六

* 2. 使用GregorianCalendar对象的get方法(参数)获取月,日,年等信息

* 3.

*/

import java.text.DateFormatSymbols;

import java.util.*;

public class CalendarTest {

public static void main(String[] args) {

//construct d as current date构造一个日期

GregorianCalendar d = new GregorianCalendar();

//获取今天是这个月的第几天

int today = d.get(Calendar.DAY_OF_MONTH); //Calendar.DAY_OF_MONTH作为参数调用,得到今天是这个月的第几天

int month = d.get(Calendar.MONTH); //月份

d.set(Calendar.DAY_OF_MONTH, 1); //设置d的日期是本月的1号

int weekDay = d.get(Calendar.DAY_OF_WEEK); //获取当天位于本星期的第几天,也就确定了星期几,值的范围是1-7

int firstDayOfWeek = d.getFirstDayOfWeek(); //获取一星期的第早坦一天,我们得到的是Calendar.SUNDAY,因为我们一星期的第一天是周日

int indent = 0; //为了定位本月第一天,定义索引

while (weekDay != firstDayOfWeek) {

//注意,月份用0-11代表1-12月,为了清晰起见,使用常量代替,下面宽迟获取月份得到的实际是当前月-1的值,所以我们要加1

//System.out.printf("当前星期的第%d天,位于当月的第%d天, 现在是%d月\n",

// weekDay, d.get(Calendar.DAY_OF_MONTH), d.get(Calendar.MONTH)+1); //Test Code

indent++;//陆巧桐缩进个数+1

d.add(Calendar.DAY_OF_MONTH, -1);//当前天数-1,如果现在是1号,则执行本条代码后,时间变为上一个月最后一天

weekDay = d.get(Calendar.DAY_OF_WEEK); //重新获取当天位于本星期的第几天

}

String[] weekDayNames = new DateFormatSymbols().getShortWeekdays();//获取简短形式的星期字符串数组

//System.out.println(weekDayNames.length);getShortWeekdays()得到的数组的长度是8,下标为0的是没有值1为星期日...7为星期六

//注释代码1

//Java核心技术的代码

/*

do {

//System.out.printf("%4s", weekDayNames[weekDay]); //经过上面定义索引,weekDay代表的是本星期日

d.add(Calendar.DAY_OF_MONTH, 1); //天数加1

weekDay = d.get(Calendar.DAY_OF_WEEK); //重新获得weekDay的值

} while (weekDay != firstDayOfWeek); //当循环完一个星期后,这里判断不成立,退出循环

*/

//我写的代码,替换上面注释代码1

for (int i=1; iweekDayNames.length; i++)//打印星期标题

System.out.printf("%3s\t", weekDayNames[i]);//引号内是一个全角的空格,因为是中文版,不是书上英文环境,中文和空格对于不上,这里我们用\t解决

//System.out.printf("%3s ", weekDayNames[i]); //方式2

System.out.println();//换行

for (int i=1; i=indent; i++)//确定一星期的一天位置,利用上面indent

System.out.printf("\t");//如用方式2,则这里内容是四个全角空格

//实现输出日期

d.set(Calendar.MONTH, month);

d.set(Calendar.DAY_OF_MONTH, 1);

do {

//print day

int day = d.get(Calendar.DAY_OF_MONTH);

System.out.printf("%3d", day);

if (day == today)

System.out.print("*");

System.out.print("\t");

d.add(Calendar.DATE, 1);//天数加1

weekDay = d.get(Calendar.DAY_OF_WEEK);//刷新weekDay

if (weekDay == firstDayOfWeek) //如果这天等于星期天则换行

System.out.println();

} while (d.get(Calendar.MONTH) == month);

}

}

用java写的日历记事本代码?

详细代码

//CalendarWindow类:

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.util.*;

import java.io.*;

public class CalendarWindow extends JFrame implements ActionListener,

MouseListener,FocusListener{

int year,month,day;

CalendarMessage calendarMessage;

CalendarPad calendarPad;

NotePad notePad;

JTextField showYear,showMonth;

JTextField [] showDay;

CalendarImage calendarImage;

Clock clock;

JButton nextYear,previousYear,nextMonth,previousMonth;

JButton saveDailyRecord,deleteDailyRecord,readDailyRecord;

File dir;

Color backColor=Color.gray;

public CalendarWindow(){

dir=new File("./dailyRecord");

dir.mkdir();

showDay=new JTextField[42];

for(int i=0;i哗弊毁showDay.length;i++){

showDay[i]=new JTextField();

showDay[i].setBackground(backColor);

showDay[i].setLayout(new GridLayout(3,3));

showDay[i].addMouseListener(this);

showDay[i].addFocusListener(this);

}

calendarMessage=new CalendarMessage();

calendarPad=new CalendarPad();

notePad=new NotePad();

Calendar calendar=Calendar.getInstance();

calendar.setTime(new Date());

year=calendar.get(Calendar.YEAR);

month=calendar.get(Calendar.MONTH)+1;

day=calendar.get(Calendar.DAY_OF_MONTH);

calendarMessage.setYear(year);

calendarMessage.setMonth(month);

calendarMessage.setDay(day);

calendarPad.setCalendarMessage(calendarMessage);

calendarPad.setShowDayTextField(showDay);

notePad.setShowMessage(year,month,day);

calendarPad.showMonthCalendar();

doMark(); //给有日志的号码做标乱备记,见后面的卜扮doMark()方法

calendarImage=new CalendarImage();

calendarImage.setImageFile(new File("sea.jpg"));

clock=new Clock();

JSplitPane splitV1=

new JSplitPane(JSplitPane.VERTICAL_SPLIT,calendarPad,calendarImage);

JSplitPane splitV2=

new JSplitPane(JSplitPane.VERTICAL_SPLIT,notePad,clock);

JSplitPane splitH=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,splitV1,splitV2);

add(splitH,BorderLayout.CENTER);

showYear=new JTextField(""+year,6);

showYear.setFont(new Font("TimesRoman",Font.BOLD,12));

showYear.setHorizontalAlignment(JTextField.CENTER);

showMonth=new JTextField(" "+month,4);

showMonth.setFont(new Font("TimesRoman",Font.BOLD,12));

showMonth.setHorizontalAlignment(JTextField.CENTER);

nextYear=new JButton("下年");

previousYear=new JButton("上年");

nextMonth=new JButton("下月");

previousMonth=new JButton("上月");

nextYear.addActionListener(this);

previousYear.addActionListener(this);

nextMonth.addActionListener(this);

previousMonth.addActionListener(this);

showYear.addActionListener(this);

JPanel north=new JPanel();

north.add(previousYear);

north.add(showYear);

north.add(nextYear);

north.add(previousMonth);

north.add(showMonth);

north.add(nextMonth);

add(north,BorderLayout.NORTH);

saveDailyRecord=new JButton("保存日志") ;

deleteDailyRecord=new JButton("删除日志");

readDailyRecord=new JButton("读取日志");

saveDailyRecord.addActionListener(this);

deleteDailyRecord.addActionListener(this);

readDailyRecord.addActionListener(this);

JPanel pSouth=new JPanel();

pSouth.add(saveDailyRecord);

pSouth.add(deleteDailyRecord);

pSouth.add(readDailyRecord);

add(pSouth,BorderLayout.SOUTH);

setVisible(true);//根据参数 b 的值显示或隐藏此 Window

setBounds(60,60,660,480);

validate();//验证此容器及其所有子组件

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置用户在此窗体上发起 "close" 时默认执行的操作

}

public void actionPerformed(ActionEvent e){

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

year++;

showYear.setText(""+year);

calendarMessage.setYear(year);

calendarPad.setCalendarMessage(calendarMessage);

calendarPad.showMonthCalendar();

notePad.setShowMessage(year,month,day);

doMark();

}

else if(e.getSource()==previousYear){

year--;

showYear.setText(""+year);

calendarMessage.setYear(year);

calendarPad.setCalendarMessage(calendarMessage);

calendarPad.showMonthCalendar();

notePad.setShowMessage(year,month,day);

doMark();

}

else if(e.getSource()==nextMonth){

month++;

if(month12) month=1;

showMonth.setText(" "+month);

calendarMessage.setMonth(month);

calendarPad.setCalendarMessage(calendarMessage);

calendarPad.showMonthCalendar();

notePad.setShowMessage(year,month,day);

doMark();

}

else if(e.getSource()==previousMonth){

month--;

if(month1) month=12;

showMonth.setText(" "+month);

calendarMessage.setMonth(month);

calendarPad.setCalendarMessage(calendarMessage);

calendarPad.showMonthCalendar();

notePad.setShowMessage(year,month,day);

doMark();

}

else if(e.getSource()==showYear){

String s=showYear.getText().trim();

char a[]=s.toCharArray();

boolean boo=false;

for(int i=0;ia.length;i++)

if(!(Character.isDigit(a[i])))

boo=true;

if(boo==true) //弹出“警告”消息对话框

JOptionPane.showMessageDialog(this,"您输入了非法年份","警告", JOptionPane.WARNING_MESSAGE);

else if(boo==false)

year=Integer.parseInt(s);

showYear.setText(""+year);

calendarMessage.setYear(year);

calendarPad.setCalendarMessage(calendarMessage);

calendarPad.showMonthCalendar();

notePad.setShowMessage(year,month,day);

doMark();

}

else if(e.getSource()==saveDailyRecord){

notePad.save(dir,year,month,day);

doMark();

}

else if(e.getSource()==deleteDailyRecord){

notePad.delete(dir,year,month,day);

doMark();

}

else if(e.getSource()==readDailyRecord)

notePad.read(dir,year,month,day);

}

public void mousePressed(MouseEvent e){

JTextField text=(JTextField)e.getSource();

String str=text.getText().trim();

try{ day=Integer.parseInt(str);

}

catch(NumberFormatException exp){

}

calendarMessage.setDay(day);

notePad.setShowMessage(year,month,day);

}

public void mouseReleased(MouseEvent e){}

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}

public void mouseClicked(MouseEvent e) {}

public void focusGained(FocusEvent e){

Component com=(Component)e.getSource();

com.setBackground(Color.red);

}

public void focusLost(FocusEvent e){

Component com=(Component)e.getSource();

com.setBackground(backColor);

}

public void doMark(){

for(int i=0;ishowDay.length;i++){

showDay[i].removeAll();

String str=showDay[i].getText().trim();

try{

int n=Integer.parseInt(str);

if(isHaveDailyRecord(n)==true){ //见后面的isHaveDailyRecord()方法

JLabel mess=new JLabel("存");

mess.setFont(new Font("TimesRoman",Font.PLAIN,11));

mess.setForeground(Color.black) ;

showDay[i].add(mess);

} }

catch(Exception exp){}

}

calendarPad.repaint();

calendarPad.validate();

}

public boolean isHaveDailyRecord(int n){

String key=""+year+""+month+""+n;

String [] dayFile=dir.list();

boolean boo=false;

for(int k=0;kdayFile.length;k++){

if(dayFile[k].equals(key+".txt")){

boo=true;

break;

} }

return boo;

}

public static void main(String args[]){

new CalendarWindow();

}

}

//CalendarPad类:

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.util.*;

public class CalendarPad extends JPanel{

int year,month,day;

CalendarMessage calendarMessage;

JTextField [] showDay;

JLabel title[];

String [] 星期={"SUN/日","MON/一","TUE/二","WED/三","THU/四","FRI/五","SAT/六"};

JPanel north,center;

public CalendarPad(){

setLayout(new BorderLayout());

north=new JPanel();

north.setLayout(new GridLayout(1,7));

center=new JPanel();

center.setLayout(new GridLayout(6,7));

add(center,BorderLayout.CENTER);

add(north,BorderLayout.NORTH);

title=new JLabel[7];

for(int j=0;j7;j++){

title[j]=new JLabel();

title[j].setFont(new Font("TimesRoman",Font.BOLD,12));

title[j].setText(星期[j]);

title[j].setHorizontalAlignment(JLabel.CENTER);

title[j].setBorder(BorderFactory.createRaisedBevelBorder());

north.add(title[j]);

}

title[0].setForeground(Color.red);

title[6].setForeground(Color.blue);

}

public void setShowDayTextField(JTextField [] text){

showDay=text;

for(int i=0;ishowDay.length;i++){

showDay[i].setFont(new Font("TimesRoman",Font.BOLD,15));

showDay[i].setHorizontalAlignment(JTextField.CENTER);

showDay[i].setEditable(false);

center.add(showDay[i]);

}

}

public void setCalendarMessage(CalendarMessage calendarMessage){

this.calendarMessage=calendarMessage;

}

public void showMonthCalendar(){

String [] a=calendarMessage.getMonthCalendar();

for(int i=0;i42;i++)

showDay[i].setText(a[i]);

validate();

}

}


标题名称:java代码怎么写日历 用java写日历
网站链接:http://bzwzjz.com/article/ddpsdjs.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 成都网站建设 成都网站建设 LED网站设计方案 网站建设公司 成都网站设计 网站设计 成都网站建设 网站制作 自适应网站设计 高端网站设计 企业网站设计 专业网站设计 成都网站建设流程 成都网站设计 定制网站设计 重庆电商网站建设 成都营销网站建设 成都网站建设 成都定制网站建设 成都做网站建设公司 企业网站建设 成都网站制作