⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testjcalendar.java

📁 本程序是一个用java写的万年历
💻 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(); 
} 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -