「java复杂日历」布局与日历JAVA程序

博主:adminadmin 2022-11-22 08:34:08 58

今天给各位分享java复杂日历的知识,其中也会对布局与日历JAVA程序进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

JAVA设计实现日历计算程序

import java.text.*;

import java.util.*;

public class Test36 {

public static void main(String[] args) {

try {

SimpleDateFormat farmatter = new SimpleDateFormat("yyyy-MM-dd");

Date d1, d2;

int year, month;

String temp;

Scanner scan = new Scanner(System.in);

System.out.print("请输入一个年月值\n年份:");

year = scan.nextInt();

System.out.print("月份:");

month = scan.nextInt();

MyCalendar.listCalendar(year, month);

System.out.print("请输入一个日期(yyyy-MM-dd):");

temp = scan.next();

d1 = farmatter.parse(temp);

System.out.println(d1.toLocaleString() + " 是 " + MyCalendar.getDayOfWeek(d1));

System.out.print("请输入两个日期(yyyy-MM-dd)\n");

System.out.print("日期1 : ");

temp = scan.next();

d1 = farmatter.parse(temp);

System.out.print("日期2 : ");

temp = scan.next();

d2 = farmatter.parse(temp);

int diff = MyCalendar.dateDiff(d1, d2);

System.out.printf("%s 和 %s 之间相隔 %d 天\n", d1.toLocaleString(), d2.toLocaleString(), diff);

}

catch (Exception e) {

e.printStackTrace();

}

}

}

class MyCalendar{

//1) 用户输入一个年份和月份,程序输出这个月的月历,每星期一行,星期天开始,星期六结束。

public static void listCalendar(int year, int month){

if(month1 || month12){

System.out.println(month + " 是非法的月份值,它的有效范围是 1~12");

return;

}

System.out.println(" " + year + " - " + month);

System.out.println(" ---------------------------");

System.out.printf("%4s%4s%4s%4s%4s%4s%4s\n", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");

try{

Calendar c = Calendar.getInstance();

c.set(year, month-1, 1);

int num = getDays(year, month); //本月天数

int i;

for(i=0; i(c.get(Calendar.DAY_OF_WEEK) - 1) * 4; i++){

System.out.print(" ");

}

for(i=0; inum; i++){

c.set(year, month-1, i+1);

System.out.printf("%4s", i+1);

if(c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY){

System.out.println();

}

}

System.out.println();

}

catch(Exception e){

e.printStackTrace();

}

}

//2) 用户输入一个日期,程序显示这个日期当天是星期几。

public static String getDayOfWeek(Date d){

String[] weeks = new String[]{"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};

Calendar c = Calendar.getInstance();

c.setTime(d);

return weeks[c.get(Calendar.DAY_OF_WEEK)-1];

}

//3) 用户输入两个日期,程序计算这两个日期相差的天数。

public static int dateDiff(Date d1, Date d2) throws Exception {

int i;

int[] days = new int[]{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

Calendar c1, c2;

int y1, y2;

int diff0 = 0, diff1 = 0, diff2 = 0;

c1 = Calendar.getInstance();

c1.setTime(d1);

y1 = c1.get(Calendar.YEAR);

c2 = Calendar.getInstance();

c2.setTime(d2);

y2 = c2.get(Calendar.YEAR);

//计算d1日期到d1所在年份第一天相隔的天数

days[1] = isLeapYear(y1) ? 29 : 28;

for(i=1; i=c1.get(Calendar.MONTH); i++){

diff1 += days[i-1];

}

//计算d2日期到d2所在年份第一天相隔的天数

days[1] = isLeapYear(y2) ? 29 : 28;

for(i=1; i=c2.get(Calendar.MONTH); i++){

diff2 += days[i-1];

}

//计算d1、d2两个日期的年份相隔的天数

if(y1 y2){

for(i=y1; iy2; i++){

diff0 += isLeapYear(i) ? 366 : 365;

}

}

else if(y1 y2){

for(i=y2; iy1; i++){

diff0 += isLeapYear(i) ? 366 : 365;

}

diff0 *= -1;

}

return diff0 + diff2 - diff1 + c2.get(Calendar.DATE) - c1.get(Calendar.DATE);

}

//判断一个年份是否是闰年

public static boolean isLeapYear(int year){

return ((year%400==0) || (year%4==0 year%100!=0)) ? true : false;

}

//返回某月的天数

public static int getDays(int year, int month){

if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){

return 31;

}

else if(month == 4 || month == 6 || month == 9 || month == 11){

return 30;

}

else{

if(isLeapYear(year) == true){

return 29;

}

else{

return 28;

}

}

}

}

运行测试:

请输入一个年月值

年份:2011

月份:6

2011 - 6

---------------------------

Sun Mon Tue Wed Thu Fri Sat

1 2 3 4

5 6 7 8 9 10 11

12 13 14 15 16 17 18

19 20 21 22 23 24 25

26 27 28 29 30

请输入一个日期(yyyy-MM-dd):2011-6-15

2011-6-15 0:00:00 是 星期三

请输入两个日期(yyyy-MM-dd)

日期1 : 2009-3-10

日期2 : 2011-6-15

2009-3-10 0:00:00 和 2011-6-15 0:00:00 之间相隔 827 天

关于java中输出日历

第一句将用户输入的数字设为日历对象的“年”成员变量,第二句和第三句同样,一个是月份,一个是按照每月第一天开始的日期,第四句用于取得一个默认的日历对象。

Java中解释一些日历类(CalendarClass)中的重要方法?

Calendar类(理解)

Calendar类是采用手工的方式取得日期,可以通过此类精确到毫秒,此类的定义如下:

public abstract class Calendar extends Object

implements Serializable, Cloneable, ComparableCalendar

这个类本身是一个抽象类,抽象类要想实例化肯定使用子类:GregorianCalendar

package org.lxh.api.datedemo;

import java.util.Calendar;

import java.util.GregorianCalendar;

public class CalendarDemo {

public static void main(String[] args) {

Calendar calendar = new GregorianCalendar();

System.out.println("YEAR: " + calendar.get(Calendar.YEAR));

System.out.println("MONTH: " + (calendar.get(Calendar.MONTH) + 1));

System.out.println("DATE: " + calendar.get(Calendar.DATE));

System.out

.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));

System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));

System.out.println("SECOND: " + calendar.get(Calendar.SECOND));

System.out

.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));

}

}

但是现在有一个问题,如果每次取时间都按照这种方式取的话,那么得累死,那么能不能设计一个类,可以通过此

类直接取得时间呢,例如:现在给出了如下的一个接口:

package org.lxh.api.datedemo;

public interface DateTime {

/**

*取得日期

* @return 日期的字符串,例如:2009-12-22

*/

public String getDate() ;

/**

*取得日期时间

* @return 日期时间的字符串,例如:2009-12-22 11:06:23.345

*/

public String getDateTime() ;

/**

*取得时间戳

* @return 返回时间戳的字符串,例如:20091222110623345

*/

public String getTimeStamp() ;

}

前面需要补0的问题需要注意,例如:01。

package org.lxh.api.datedemo;

import java.util.Calendar;

import java.util.GregorianCalendar;

public class DateTimeImpl implements DateTime {

private Calendar calendar;

public DateTimeImpl() {

this.calendar = new GregorianCalendar();

}

public String getDate() {

StringBuffer buf = new StringBuffer();

buf.append(calendar.get(Calendar.YEAR)).append("-");

buf.append(this.addZero((calendar.get(Calendar.MONTH) + 1), 2)).append("-");

buf.append(this.addZero(calendar.get(Calendar.DATE), 2));

return buf.toString();

}

public String getDateTime() {

StringBuffer buf = new StringBuffer();

buf.append(calendar.get(Calendar.YEAR)).append("-");

buf.append(this.addZero((calendar.get(Calendar.MONTH) + 1), 2)).append("-");

buf.append(this.addZero(calendar.get(Calendar.DATE), 2)).append(" ");

buf.append(this.addZero(calendar.get(Calendar.HOUR_OF_DAY), 2)).append(":") ;

buf.append(this.addZero(calendar.get(Calendar.MINUTE), 2)).append(":") ;

buf.append(this.addZero(calendar.get(Calendar.SECOND), 2)).append(".") ;

buf.append(this.addZero(calendar.get(Calendar.MILLISECOND), 3)) ;

return buf.toString();

}

@Override

public String getTimeStamp() {

StringBuffer buf = new StringBuffer();

buf.append(calendar.get(Calendar.YEAR));

buf.append(this.addZero((calendar.get(Calendar.MONTH) + 1), 2));

buf.append(this.addZero(calendar.get(Calendar.DATE), 2));

buf.append(this.addZero(calendar.get(Calendar.HOUR_OF_DAY), 2));

buf.append(this.addZero(calendar.get(Calendar.MINUTE), 2)) ;

buf.append(this.addZero(calendar.get(Calendar.SECOND), 2)) ;

buf.append(this.addZero(calendar.get(Calendar.MILLISECOND), 3)) ;

return buf.toString();

}

private String addZero(int num, int len) {

StringBuffer buf = new StringBuffer();

buf.append(num);

while (buf.length() len) {

buf.insert(0, 0);

}

return buf.toString();

}

}

「java复杂日历」布局与日历JAVA程序

用java做一个日历显示数据功能,在页面上显示日期数据。

MainFrame.java是显示日历程序,Clock.java是日历计算程序(可以不要)。

编译后运行MainFrame这个类即可。

swing窗口显示万年历,jdk1.4以上环境编译运行。

package org.test;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.GridLayout;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.sql.Date;

import java.util.Calendar;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

public class MainFrame extends JFrame {

 private static final long serialVersionUID = -306484324260972141L;

 JPanel panel = new JPanel(new BorderLayout());

 JPanel panel1 = new JPanel();

 JPanel panel2 = new JPanel(new GridLayout(7, 7));

 JPanel panel3 = new JPanel();

 JLabel[] label = new JLabel[49];

 JLabel y_label = new JLabel("年份");

 JLabel m_label = new JLabel("月份");

 JComboBox com1 = new JComboBox();

 JComboBox com2 = new JComboBox();

 int re_year, re_month, x_size, y_size;

 String year_num;

 Calendar now = Calendar.getInstance(); // 实例化Calendar

 

 MainFrame() {

  super("万年历"); 

  setSize(300, 350);

  x_size = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth());

  y_size = (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight());

  setLocation((x_size - 300) / 2, (y_size - 350) / 2);

  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  panel1.add(y_label);

  panel1.add(com1);

  panel1.add(m_label);

  panel1.add(com2);

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

   label[i] = new JLabel("", JLabel.CENTER);// 将显示的字符设置为居中 

   panel2.add(label[i]);

  }

  panel3.add(new Clock(this));

  panel.add(panel1, BorderLayout.NORTH);

  panel.add(panel2, BorderLayout.CENTER);

  panel.add(panel3, BorderLayout.SOUTH); 

  panel.setBackground(Color.white);

  panel1.setBackground(Color.white);

  panel2.setBackground(Color.white);

  panel3.setBackground(Color.white);

  Init();

  com1.addActionListener(new ClockAction());

  com2.addActionListener(new ClockAction());

  setContentPane(panel);

  setVisible(true);

  setResizable(false);

 }

 

 class ClockAction implements ActionListener {

  public void actionPerformed(ActionEvent arg0) {

   int c_year, c_month, c_week;

   c_year = Integer.parseInt(com1.getSelectedItem().toString()); // 得到当前所选年份 

   c_month = Integer.parseInt(com2.getSelectedItem().toString()) - 1; // 得到当前月份,并减1,计算机中的月为0-11

   c_week = use(c_year, c_month); // 调用函数use,得到星期几

   Resetday(c_week, c_year, c_month); // 调用函数Resetday

   }

 }

 

 public void Init() {

  int year, month_num, first_day_num;

  String log[] = { "日", "一", "二", "三", "四", "五", "六" };

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

   label[i].setText(log[i]);

  }

  

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

   label[i].setForeground(Color.red); // 将星期日的日期设置为红色

  }

  

  for (int i = 6; i  49; i = i + 7) {

   label[i].setForeground(Color.green);// 将星期六的日期设置为绿色

  }

  

  for (int i = 1; i  10000; i++) {

   com1.addItem("" + i);

  }

  

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

   com2.addItem("" + i);

  }

  

  month_num = (int) (now.get(Calendar.MONTH)); // 得到当前时间的月份 

  year = (int) (now.get(Calendar.YEAR)); // 得到当前时间的年份  

  com1.setSelectedIndex(year - 1); // 设置下拉列表显示为当前年

  com2.setSelectedIndex(month_num); // 设置下拉列表显示为当前月

  first_day_num = use(year, month_num);

  Resetday(first_day_num, year, month_num);

 }

 

 public int use(int reyear, int remonth) {

  int week_num;

  now.set(reyear, remonth, 1); // 设置时间为所要查询的年月的第一天

  week_num = (int) (now.get(Calendar.DAY_OF_WEEK));// 得到第一天的星期 

  return week_num;

 } 

 

 @SuppressWarnings("deprecation")

 public void Resetday(int week_log, int year_log, int month_log) {

  int month_day_score; // 存储月份的天数 

  int count;

  month_day_score = 0;

  count = 1;

  Date date = new Date(year_log, month_log + 1, 1); // now

  Calendar cal = Calendar.getInstance();

  cal.setTime(date);

  cal.add(Calendar.MONTH, -1); // 前个月

  month_day_score = cal.getActualMaximum(Calendar.DAY_OF_MONTH);// 最后一天

  for (int i = 7; i  49; i++) { // 初始化标签

   label[i].setText("");

  }

  week_log = week_log + 6; // 将星期数加6,使显示正确

  month_day_score = month_day_score + week_log;

  for (int i = week_log; i  month_day_score; i++, count++) {

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

  }

 }

 

 public static void main(String[] args) {

  JFrame.setDefaultLookAndFeelDecorated(true);

  new MainFrame();

 }

}

package org.test;

import java.awt.Color;

import java.util.Calendar;

import java.awt.Canvas;

import java.awt.Font;

import java.awt.Graphics;

import java.text.SimpleDateFormat;

public class Clock extends Canvas implements Runnable{

 private static final long serialVersionUID = 3660124045489727166L;

 MainFrame mf;

 Thread t;

 String time;

 

 public Clock(MainFrame mf){

  this.mf=mf;

  setSize(280,40);

  setBackground(Color.white);

  t=new Thread(this);//实例化线程

  t.start(); 

  //调用线程   

 }

 

 public void run(){

  while(true){

   try{

    Thread.sleep(1000);//休眠1秒钟

   }catch(InterruptedException e){

    System.out.println("异常");

   }

   this.repaint(100);

  }

 }

 

 public void paint(Graphics g){

  Font f=new Font("宋体",Font.BOLD,16);

  SimpleDateFormat SDF=new SimpleDateFormat("yyyy'年'MM'月'dd'日'HH:mm:ss");//格式化时间显示类型  

  Calendar now=Calendar.getInstance();

  time=SDF.format(now.getTime());        //得到当前日期和时间    

  g.setFont(f);

  g.setColor(Color.orange);

  g.drawString(time,45,25);

 }

}

怎样用java编写日历

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.GridLayout;

import java.awt.SystemColor;

import java.awt.event.ActionEvent;

import java.awt.event.KeyEvent;

import java.awt.event.MouseEvent;

import java.util.Calendar;

import java.util.GregorianCalendar;

import java.util.Locale;

import java.util.Date;

import java.util.StringTokenizer;

import javax.swing.BorderFactory;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

import javax.swing.JToggleButton;

import javax.swing.SwingConstants;

import javax.swing.UIManager;

/**

* pTitle: Swing日历/p

* pDescription: 操作日期/p

* @author duxu2004

* @version 1.0.1

*/

class JCalendar extends JPanel{

//动态表示年月日

private int year=0;

private int month=0;

private int day=0;

//主面板

private JPanel Main = new JPanel();

//日面板

private JPanel jPanelDay = new JPanel();

//月面板

private JPanel jPanelMonth = new JPanel();

//年的输入位置

private JTextField Year = new JTextField();

//月的输入位置

private JTextField Month = new JTextField();

//减少月份

private JButton MonthDown = new JButton();

//增加月份

private JButton MonthUp = new JButton();

private JPanel jPanelButton = new JPanel();

//减少年份

private JButton YearDown = new JButton();

//增加年份

private JButton YearUp = new JButton();

//显示日期的位置

private JLabel Out = new JLabel();

//中国时区,以后可以从这里扩展可以设置时区的功能

private Locale l=Locale.CHINESE;

//主日历

private GregorianCalendar cal=new GregorianCalendar(l);

//星期面板

private JPanel weekPanel=new JPanel();

//天按钮组

private JToggleButton[] days=new JToggleButton[42];

//天面板

private JPanel Days = new JPanel();

//标示

private JLabel jLabel1 = new JLabel();

private JLabel jLabel2 = new JLabel();

private JLabel jLabel3 = new JLabel();

private JLabel jLabel4 = new JLabel();

private JLabel jLabel5 = new JLabel();

private JLabel jLabel6 = new JLabel();

private JLabel jLabel7 = new JLabel();

//当前选择的天数按钮

private JToggleButton cur=null;

//月份天数数组,用来取得当月有多少天

// 1 2 3 4 5 6 7 8 9 10 11 12

private int[] mm={31,28,31,30,31,30,31,31,30,31,30,31};

//空日期构造函数

public JCalendar() {

try {

jbInit();

}

catch(Exception e) {

e.printStackTrace();

}

}

//带日期设置的构造函数

public JCalendar(int year, int month, int day) {

cal.set(year, month, day);

try {

jbInit();

}

catch (Exception e) {

e.printStackTrace();

}

}

//带日历输入的构造函数

public JCalendar(GregorianCalendar calendar) {

cal=calendar;

try {

jbInit();

}

catch (Exception e) {

e.printStackTrace();

}

}

//带日期输入的构造函数

public JCalendar(Date date) {

cal.setTime(date);

try {

jbInit();

}

catch (Exception e) {

e.printStackTrace();

}

}

//初始化组件

private void jbInit() throws Exception {

//初始化年、月、日

iniCalender();

this.setLayout(new BorderLayout());

this.setBorder(BorderFactory.createRaisedBevelBorder());

this.setMaximumSize(new Dimension(200, 200));

this.setMinimumSize(new Dimension(200, 200));

this.setPreferredSize(new Dimension(200, 200));

Main.setLayout(new BorderLayout());

Main.setBackground(SystemColor.info);

Main.setBorder(null);

Out.setBackground(Color.lightGray);

Out.setHorizontalAlignment(SwingConstants.CENTER);

Out.setMaximumSize(new Dimension(100, 19));

Out.setMinimumSize(new Dimension(100, 19));

Out.setPreferredSize(new Dimension(100, 19));

jLabel1.setForeground(Color.red);

jLabel1.setHorizontalAlignment(SwingConstants.CENTER);

jLabel1.setHorizontalTextPosition(SwingConstants.CENTER);

jLabel1.setText("日");

jLabel2.setForeground(Color.blue);

jLabel2.setHorizontalAlignment(SwingConstants.CENTER);

jLabel2.setHorizontalTextPosition(SwingConstants.CENTER);

jLabel2.setText("六");

jLabel3.setHorizontalAlignment(SwingConstants.CENTER);

jLabel3.setHorizontalTextPosition(SwingConstants.CENTER);

jLabel3.setText("五");

jLabel4.setHorizontalAlignment(SwingConstants.CENTER);

jLabel4.setHorizontalTextPosition(SwingConstants.CENTER);

jLabel4.setText("四");

jLabel5.setHorizontalAlignment(SwingConstants.CENTER);

jLabel5.setHorizontalTextPosition(SwingConstants.CENTER);

jLabel5.setText("三");

jLabel6.setBorder(null);

jLabel6.setHorizontalAlignment(SwingConstants.CENTER);

jLabel6.setHorizontalTextPosition(SwingConstants.CENTER);

jLabel6.setText("二");

jLabel7.setBackground(Color.lightGray);

jLabel7.setForeground(Color.black);

jLabel7.setBorder(null);

jLabel7.setHorizontalAlignment(SwingConstants.CENTER);

jLabel7.setHorizontalTextPosition(SwingConstants.CENTER);

jLabel7.setText("一");

weekPanel.setBackground(UIManager.getColor("InternalFrame.activeTitleGradient"));

weekPanel.setBorder(BorderFactory.createEtchedBorder());

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

weekPanel.add(jLabel1, null);

weekPanel.add(jLabel7, null);

weekPanel.add(jLabel6, null);

weekPanel.add(jLabel5, null);

weekPanel.add(jLabel4, null);

weekPanel.add(jLabel3, null);

weekPanel.add(jLabel2, null);

MonthUp.setAlignmentX((float) 0.0);

MonthUp.setActionMap(null);

jPanelMonth.setBackground(SystemColor.info);

jPanelMonth.setLayout(new BorderLayout());

jPanelMonth.setBorder(BorderFactory.createEtchedBorder());

Month.setBorder(null);

Month.setHorizontalAlignment(SwingConstants.CENTER);

Month.addMouseListener(new java.awt.event.MouseAdapter() {

public void mouseClicked(MouseEvent e) {

Month_mouseClicked(e);

}

});

Month.addKeyListener(new java.awt.event.KeyAdapter() {

public void keyPressed(KeyEvent e) {

Month_keyPressed(e);

}

});

MonthDown.setBorder(null);

MonthDown.setText("\u25C4");

MonthDown.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(ActionEvent e) {

MonthDown_actionPerformed(e);

}

});

MonthUp.setBorder(null);

MonthUp.setText("\u25BA");

MonthUp.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(ActionEvent e) {

MonthUp_actionPerformed(e);

}

});

jPanelButton.setLayout(null);

jPanelButton.setBorder(null);

jPanelButton.addComponentListener(new java.awt.event.ComponentAdapter() {

public void componentResized(java.awt.event.ComponentEvent evt) {

jPanelButtonComponentResized(evt);

}

});

Year.setBorder(BorderFactory.createEtchedBorder());

Year.setMaximumSize(new Dimension(80, 25));

Year.setMinimumSize(new Dimension(80, 25));

Year.setPreferredSize(new Dimension(80, 25));

Year.setHorizontalAlignment(SwingConstants.CENTER);

Year.addMouseListener(new java.awt.event.MouseAdapter() {

public void mouseClicked(MouseEvent e) {

Year_mouseClicked(e);

}

});

Year.addKeyListener(new java.awt.event.KeyAdapter() {

public void keyPressed(KeyEvent e) {

Year_keyPressed(e);

}

});

YearDown.setBorder(null);

YearDown.setMaximumSize(new Dimension(16, 16));

YearDown.setMinimumSize(new Dimension(16, 16));

YearDown.setPreferredSize(new Dimension(16, 16));

YearDown.setSize(new Dimension(16, 16));

YearDown.setText("▼");

YearDown.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(ActionEvent e) {

YearDown_actionPerformed(e);

}

});

YearUp.setBorder(null);

YearUp.setMaximumSize(new Dimension(16, 16));

YearUp.setMinimumSize(new Dimension(16, 16));

YearUp.setPreferredSize(new Dimension(16, 16));

YearUp.setSize(new Dimension(16, 16));

YearUp.setText("▲");

YearUp.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(ActionEvent e) {

YearUp_actionPerformed(e);

}

});

jPanelDay.setLayout(new BorderLayout());

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

Days.setBackground(SystemColor.info);

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

days[i]=new JToggleButton();

days[i].setBorder(null);

days[i].setBackground(SystemColor.info);

days[i].setHorizontalAlignment(SwingConstants.CENTER);

days[i].setHorizontalTextPosition(SwingConstants.CENTER);

//days[i].setSize(l,l);

days[i].addActionListener(new java.awt.event.ActionListener(){

public void actionPerformed(ActionEvent e) {

day=Integer.parseInt(((JToggleButton)e.getSource()).getText());

showDate();

showDays();

}

});

Days.add(days[i]);

}

this.add(Main, BorderLayout.NORTH);

this.add(jPanelDay, BorderLayout.CENTER);

this.add(jPanelMonth, BorderLayout.SOUTH);

Main.add(Year, BorderLayout.CENTER);

Main.add(Out, BorderLayout.WEST);

Main.add(jPanelButton, BorderLayout.EAST);

jPanelButton.add(YearUp);

jPanelButton.add(YearDown);

jPanelDay.add(weekPanel,BorderLayout.NORTH);

jPanelDay.add(Days, BorderLayout.CENTER);

jPanelMonth.add(Month, BorderLayout.CENTER);

jPanelMonth.add(MonthDown, BorderLayout.WEST);

jPanelMonth.add(MonthUp, BorderLayout.EAST);

showMonth();

showYear();

showDate();

showDays();

}

//自定义重画年选择面板

void jPanelButtonComponentResized(java.awt.event.ComponentEvent evt){

YearUp.setLocation(0,0);

YearDown.setLocation(0,YearUp.getHeight());

jPanelButton.setSize(YearUp.getWidth(),YearUp.getHeight()*2);

jPanelButton.setPreferredSize(new Dimension(YearUp.getWidth(),YearUp.getHeight()*2));

jPanelButton.updateUI();

}

//测试用

public static void main(String[] args){

JFrame f=new JFrame();

f.setContentPane(new JCalendar());

f.pack();

//f.setResizable(false);

f.show();

}

//增加年份

void YearUp_actionPerformed(ActionEvent e) {

year++;

showYear();

showDate();

showDays();

}

//减少年份

void YearDown_actionPerformed(ActionEvent e) {

year--;

showYear();

showDate();

showDays();

}

//减少月份

void MonthDown_actionPerformed(ActionEvent e) {

month--;

if(month0) {

month = 11;

year--;

showYear();

}

showMonth();

showDate();

showDays();

}

//增加月份

void MonthUp_actionPerformed(ActionEvent e) {

month++;

if(month==12) {

month=0;

year++;

showYear();

}

showMonth();

showDate();

showDays();

}

//初始化年月日

void iniCalender(){

year=cal.get(Calendar.YEAR);

month=cal.get(Calendar.MONTH);

day=cal.get(Calendar.DAY_OF_MONTH);

}

//刷新月份

void showMonth(){

Month.setText(Integer.toString(month+1)+"月");

}

//刷新年份

void showYear(){

Year.setText(Integer.toString(year)+"年");

}

//刷新日期

void showDate(){

Out.setText(Integer.toString(year)+"-"+Integer.toString(month+1)+"-"+Integer.toString(day));

}

//重画天数选择面板

void showDays() {

cal.set(year,month,1);

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

int n=mm[month];

if(cal.isLeapYear(year)month==1) n++;

int i=0;

for(;ifirstDayOfWeek-1;i++){

days[i].setEnabled(false);

days[i].setSelected(false);

days[i].setText("");

}

int d=1;

for(;d=n;d++){

days[i].setText(Integer.toString(d));

days[i].setEnabled(true);

if(d==day) days[i].setSelected(true);

else days[i].setSelected(false);;

i++;

}

for(;i42;i++){

days[i].setEnabled(false);

days[i].setSelected(false);

days[i].setText("");

}

}

//单击年份面板选择整个年份字符串

void SelectionYear(){

Year.setSelectionStart(0);

Year.setSelectionEnd(Year.getText().length());

}

//单击月份面板选择整个月份字符串

void SelectionMonth(){

Month.setSelectionStart(0);

Month.setSelectionEnd(Month.getText().length());

}

//月份面板响应鼠标单击事件

void Month_mouseClicked(MouseEvent e) {

//SelectionMonth();

inputMonth();

}

//检验输入的月份

void inputMonth(){

String s;

if(Month.getText().endsWith("月"))

{

s=Month.getText().substring(0,Month.getText().length()-1);

}

else s=Month.getText();

month=Integer.parseInt(s)-1;

this.showMe();

}

//月份面板键盘敲击事件响应

void Month_keyPressed(KeyEvent e) {

if(e.getKeyChar()==10)

inputMonth();

}

//年份面板响应鼠标单击事件

void Year_mouseClicked(MouseEvent e) {

//SelectionYear();

inputYear();

}

//年份键盘敲击事件响应

void Year_keyPressed(KeyEvent e) {

//System.out.print(new Integer(e.getKeyChar()).byteValue());

if(e.getKeyChar()==10)

inputYear();

}

//检验输入的年份字符串

void inputYear() {

String s;

if(Year.getText().endsWith("年"))

{

s=Year.getText().substring(0,Year.getText().length()-1);

}

else s=Year.getText();

year=Integer.parseInt(s);

this.showMe();

}

//以字符串形式返回日期,yyyy-mm-dd

public String getDate(){return Out.getText();}

//以字符串形式输入日期,yyyy-mm-dd

public void setDate(String date){

if(date!=null){

StringTokenizer f = new StringTokenizer(date, "-");

if(f.hasMoreTokens())

year = Integer.parseInt(f.nextToken());

if(f.hasMoreTokens())

month = Integer.parseInt(f.nextToken());

if(f.hasMoreTokens())

day = Integer.parseInt(f.nextToken());

cal.set(year,month,day);

}

this.showMe();

}

//以日期对象形式输入日期

public void setTime(Date date){

cal.setTime(date);

this.iniCalender();

this.showMe();

}

//返回日期对象

public Date getTime(){return cal.getTime();}

//返回当前的日

public int getDay() {

return day;

}

//设置当前的日

public void setDay(int day) {

this.day = day;

cal.set(this.year,this.month,this.day);

this.showMe();

}

//设置当前的年

public void setYear(int year) {

this.year = year;

cal.set(this.year,this.month,this.day);

this.showMe();

}

//返回当前的年

public int getYear() {

return year;

}

//返回当前的月

public int getMonth() {

return month;

}

//设置当前的月

public void setMonth(int month) {

this.month = month;

cal.set(this.year,this.month,this.day);

this.showMe();

}

//刷新

public void showMe(){

this.showDays();

this.showMonth();

this.showYear();

this.showDate();

}

}

public class TestJCalendar {

public static void main(String[] args) {

JFrame f=new JFrame();

f.setContentPane(new JCalendar());

f.pack();

//f.setResizable(false);

f.show();

}

}

java复杂日历的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于布局与日历JAVA程序、java复杂日历的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-22,除非注明,否则均为首码项目网原创文章,转载请注明出处。