怎样用java编写日历

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样用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;

/**
* <p>Title: Swing日历</p>
* <p>Description: 操作日期</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;i<42;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(month<0)
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(;i<firstDayOfWeek-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(;i<42;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();

参考技术A

Java编写日历代码:

import java.util.Scanner; 
public class Wan public static void main(String[] args)
 
 Scanner name = new Scanner(System.in);
 System.out.print("请输入要查询的年份:"); 
 int year = name.nextInt(); 
 System.out.print("请输入该年的月份"); 
 int month = name.nextInt(); 
  //累加 该年至输入的月份 天数 
 //比如 输入2009年的 3月分 
 // 那就累加 2009年的1月至 
 3月1号的总天数 
 public void sumDay(int year,int month)
  
 int day = 0; 
 int sumDay = 0; 
 for(int i = 1;i<=month;i++) switch(i)
  
 case 1: 
 case 3: 
 case 5: 
 case 7: 
 case 8: 
 case 10: 
 case 12: 
 day = 31; 
 break; 
 case 2: 
 if(year % 4 == 0 || year % 400 == 0 && year %100!=0)
  day = 29;  
 else day = 28;  
 break; 
 default: day = 30;  
 //最后一个月份不要累加 因为我们只是要算到该月的一号就可以了 
 if(i < month) sumDay += day;   
 //累加 2000年到该年的一月一号天数 
 for(int i = 2000;i<year;i++)
  if( i % 4 == 0 || i %400== 0 && i % 100 != 0)
  sumDay += 366; else sumDay += 365;   
 //求该月一号为星期几 
 int week = sumDay % 7 +1; if(week == 7) week = 0;   
 public void fomatDate(int week,int day)
  
 int g = 0; for(int i = 0;i<week;i++)
  System.out.print("\\t");  
 for(int i = 1;i<=day;i++) System.out.print(i+"\\t"); 
 g = week + i; if(g % 7 == 0) System.out.println();  
    
 

以上是关于怎样用java编写日历的主要内容,如果未能解决你的问题,请参考以下文章

java题目,日历类,求助。

急求大神教如何在Python里编写日历

怎样用java编写图形界面的Application程序

JAVA编写简单的日历,输入日期即可查看日历

请问用java编写一个压缩程序,怎样解决压缩文件zip里的文件名乱码问题!

怎样用java编写一个可以选择不同用户的登录页面