📄 calendarnote.java
字号:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Calendar;
import java.util.Date;
import java.io.*;
//******************************************************************************
class Note extends JFrame implements ActionListener
{
private JButton buttonMon=new JButton("星期一");
private JButton buttonTue=new JButton("星期二");
private JButton buttonWed=new JButton("星期三");
private JButton buttonThu=new JButton("星期四");
private JButton buttonFri=new JButton("星期五");
private JButton buttonSat=new JButton("星期六");
private JButton buttonSun=new JButton("星期日");
private JButton[] button=new JButton[37];
private JButton btnDate=new JButton("这里放置日期");
private JButton btnSave=new JButton("添加");
private JButton btnChange=new JButton("修改");
private JButton btnDelete=new JButton("删除");
private JButton btnRecord=new JButton("备忘");
private JButton btnAbout=new JButton("关于");
private Color defaultColor; //保存按牛默认的颜色
private String dayOfMonth="";//保存选取按钮的号数
private RecordDialog dlg=new RecordDialog();
private JPanel panelCenter=new JPanel();
GridLayout gridlayout=new GridLayout(7,7,5,5);
private JTextArea textArea=new JTextArea(5,40);
private JScrollPane scrollBar=new JScrollPane(textArea);
private Calendar calendar ;
private int hour;
private int minute;
private int second;
private int month;
private int day;
private int year;
private int dayOfWeek;
private Timer myTimer;
//==========================================================================
public Note()
{
super("CalenderNote");
setBounds(250,200,548,375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
textArea.setLineWrap(true);
getContentPane().add(btnDate,"North");
btnDate.setForeground(Color.red);
btnDate.setHorizontalAlignment(JLabel.LEFT);
int i; //构造按钮
for(i=0;i<37;i++)
button[i]=new JButton();
panelCenter.setLayout(gridlayout);
panelCenter.add(buttonSun);
panelCenter.add(buttonMon);
panelCenter.add(buttonTue);
panelCenter.add(buttonWed);
panelCenter.add(buttonThu);
panelCenter.add(buttonFri);
panelCenter.add(buttonSat);
defaultColor=buttonSun.getBackground(); //得到按牛默认颜色
for(i=0;i<37;i++)
panelCenter.add(button[i]);
for(i=0;i<37;i++)
button[i].addActionListener(this);
panelCenter.add(btnSave);
btnSave.setToolTipText("为指定日期添加备忘录");
btnSave.addActionListener(this);
panelCenter.add(btnChange);
btnChange.setToolTipText("修改选中备忘录");
btnChange.addActionListener(this);
panelCenter.add(btnDelete);
btnDelete.setToolTipText("删除选中备忘录");
btnDelete.addActionListener(this);
panelCenter.add(btnRecord);
btnRecord.setToolTipText("为选中日期添加备忘录(内容为下面文本域的内容)");
btnRecord.addActionListener(this);
panelCenter.add(btnAbout);
btnAbout.addActionListener(this);
getContentPane().add(panelCenter,"Center");
getContentPane().add(scrollBar,"South");
calendar=Calendar.getInstance();
day=calendar.get(Calendar.DAY_OF_MONTH);
dayOfMonth=String.valueOf(day);
//设置定时器
myTimer=new Timer(1000,new ActionListener(){
public void actionPerformed(ActionEvent ev){
calendar=Calendar.getInstance();
hour=calendar.get(Calendar.HOUR);
minute=calendar.get(Calendar.MINUTE);
second=calendar.get(Calendar.SECOND);
month=calendar.get(Calendar.MONTH)+1;
day=calendar.get(Calendar.DAY_OF_MONTH);
year=calendar.get(Calendar.YEAR);
dayOfWeek=calendar.get(Calendar.DAY_OF_WEEK);
btnDate.setText("现在是:"+year+" 年 "+month+" 月 "+day+" 日--"
+hour+" 时 "+minute+" 分 "+second+" 秒");
setAllBtnVisible(); //将号数按正确位置排列
checkRecord(); //将有备忘的那天用红色显示
if(!textArea.hasFocus())
{
if(!isSpecifyFileExist(dayOfMonth))
textArea.setText("当前暂无备忘录!");
else
{
File file=new File("Record\\"+year+"_"+month+"_"+dayOfMonth+".txt");
try
{
FileReader fileReader=new FileReader(file);
int len=(int)file.length();
if(len!=0)
{
char[] buff=new char[len];
fileReader.read(buff);
fileReader.close();
String str="";
int i=0;
while(buff[i]!='\0')
{
str=str+buff[i];
i++;
if(i==len)
break;
}
textArea.setText(str);
}
else//如果文件为空
textArea.setText("");
}catch(IOException ioex){System.out.println(ioex.getMessage());}
}
}
}
});
myTimer.start();
setVisible(true);
}
//==========================================================================
public int toInt(String str)
{
int i;
int returnValue=0;
for(i=0;i<str.length();i++)
{
if(str.charAt(i)>=48 && str.charAt(i)<=57)
returnValue=returnValue*10+((int)str.charAt(i)-48);
}
return returnValue;
}
//==========================================================================
public boolean isSpecifyFileExist(String day)
{
File file=new File("Record\\"+year+"_"+month+"_"+day+".txt");
if(file.exists())
return true;
return false;
}
//==========================================================================
//根据给定的号数找到那天按钮的位置
public int getPosFromDay(int day)
{
int i;
int returnValue=-1;
for(i=0;i<37;i++)
if(button[i].getText().equals(String.valueOf(day)))
{
returnValue=i;
break;
}
return returnValue;
}
//==========================================================================
//将有备忘的那天用红色显示
public void checkRecord()
{ button[getPosFromDay(toInt(dayOfMonth))].setBackground(Color.pink);
int i;
for(i=1;i<=getDays(year,month);i++)
{
if(isSpecifyFileExist(String.valueOf(i)))
button[getPosFromDay(i)].setForeground(Color.red);
else
button[getPosFromDay(i)].setForeground(Color.black);
}
}
//==========================================================================
private int getDays(int y,int m)
{
return new Date(y-1900,m,0).getDate();
}
//==========================================================================
public void setBtnCaption(JButton btn,String caption)
{
btn.setText(caption);
}
//==========================================================================
//根据提供的号数和星期几找出当前天的按钮的位置
public int findPos(int dayOfMonth,int dayOfWeek)
{
int[] a=new int[7]; //存放可能的按钮号(根据几号)
int[] b=new int[6]; //存放可能的按钮号(根据星期几)
int i,j;
int pos=0;
for(i=0;i<7;i++) //根据号数得到可能的位置
{
a[i]=dayOfMonth-1;
dayOfMonth++;
}
for(i=0;i<6;i++) //根据星期几得到可能的位置
b[i]=dayOfWeek+i*7;
for(i=0;i<7;i++) //取a,b的交集得到正确的位置
for(j=0;j<6;j++)
{
if(b[j]==a[i])
{
pos=b[j];
break;
}
}
return pos;
}
//==========================================================================
public void setAllBtnVisible()
{
int amountOfDays=getDays(year,month);
int start;
int currentPos=findPos(day,dayOfWeek-1);
start=currentPos+1-day; //得到 1 号的位置(数组下标)
int i;
int j=1;
for(i=0;i<start;i++)
{
button[i].setEnabled(false);
button[i].setText("");
}
for(i=start;i<amountOfDays+start;i++)
{
setBtnCaption(button[i],String.valueOf(j));
button[i].setEnabled(true);
button[i].setIcon(null);
button[i].setBackground(defaultColor);
j++;
}
for(i=getPosFromDay(getDays(year,month))+1;i<37;i++)
{
button[i].setEnabled(false);
button[i].setText("");
}
button[currentPos].setIcon(new ImageIcon("image\\gou.gif"));
}
//==========================================================================
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==btnSave) //添加
dlg.setVisible(true);
JButton btn=(JButton)e.getSource();
//如果单击的不是数字按钮dayOfMonth的值就不改变
if(!(btn.getText().equals("添加")
||btn.getText().equals("修改")
||btn.getText().equals("删除")
||btn.getText().equals("备忘")
||btn.getText().equals("关于")))
{
dayOfMonth=btn.getText();
int i;
for(i=0;i<getPosFromDay(toInt(dayOfMonth));i++)
button[i].setBackground(defaultColor);
button[getPosFromDay(toInt(dayOfMonth))].setBackground(Color.pink);
for(i=i+1;i<37;i++)
button[i].setBackground(defaultColor);
}
if(e.getSource().equals(btnChange)) //修改
{
myTimer.stop();
int flag=JOptionPane.showConfirmDialog(this,
"确定要修改当前备忘录?",
"请确认",
JOptionPane.YES_NO_OPTION);
if(flag==JOptionPane.YES_OPTION)
{
File file=new File("Record\\"+year+"_"+month+"_"+dayOfMonth+".txt");
try
{
FileWriter fileWriter=new FileWriter(file);
fileWriter.write(textArea.getText());
fileWriter.close();
JOptionPane.showMessageDialog(this,
" 修改成功",
"提示",
JOptionPane.OK_OPTION/*,
ImageIcon("image\\tishi.gif")*/);
}catch(IOException ioexc){}
}
myTimer.start();
}
if(e.getSource().equals(btnDelete)) //删除
{
int flag=JOptionPane.showConfirmDialog(this,
"确定要删除当前备忘录?",
"请确认",
JOptionPane.YES_NO_OPTION);
if(flag==JOptionPane.YES_OPTION)
{
File file=new File("Record\\"+year+"_"+month+"_"+dayOfMonth+".txt");
file.delete();
}
}
if(e.getSource().equals(btnRecord)) //备忘
{
File file=new File("Record\\"+year+"_"+month+"_"+dayOfMonth+".txt");
try
{
FileWriter fileWriter=new FileWriter(file);
fileWriter.write(textArea.getText());
fileWriter.close();
JOptionPane.showMessageDialog(this,
" 在选中时间添\n"+
" 加备忘录成功",
"提示",
JOptionPane.OK_OPTION,
new ImageIcon("image\\icon.gif"));
}catch(IOException ii){}
}
if(e.getSource().equals(btnAbout)) //关于
{
JOptionPane.showMessageDialog(this,
"作者:※乱舞靑春※\n"+
"时间:2007-4-20\n"+
"QQ:287209159\n"+
"email: wu2yi2bing@163.com ",
"关于作者",
JOptionPane.OK_OPTION,
new ImageIcon("image\\icon.gif"));
}
}
}
//******************************************************************************
class RecordDialog extends JFrame implements ActionListener
{
private JLabel labelYear;
private JLabel labelMonth;
private JLabel labelDay;
private JTextField editYear;
private JTextField editMonth;
private JTextField editDay;
private JTextArea textArea;
private JScrollPane scrollBar;
private JButton btnOK=new JButton("保存");
private JButton btnCancle=new JButton("取消");
private JPanel panel=new JPanel();
private JPanel panelNorthWest=new JPanel();
private JPanel panelNorthEast=new JPanel();
//======================================================================
RecordDialog()
{
super("请在下面输入你的备忘录信息");
setBounds(250,200,300,280);
setResizable(false);
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
labelYear=new JLabel("请输入年份:");
labelMonth=new JLabel("请输入月份:");
labelDay=new JLabel("请输入几号:");
labelYear.setHorizontalAlignment(JLabel.LEFT);
labelMonth.setHorizontalAlignment(JLabel.LEFT);
labelDay.setHorizontalAlignment(JLabel.LEFT);
editYear=new JTextField();
editMonth=new JTextField();
editDay=new JTextField(10);
textArea=new JTextArea();
textArea.setLineWrap(true);
scrollBar=new JScrollPane(textArea);
getContentPane().add(panel,"North");
panel.setLayout(new BorderLayout());
panel.add(panelNorthWest,"West");
panelNorthWest.setLayout(new GridLayout(3,1,5,5));
panelNorthWest.add(labelYear);
panelNorthWest.add(editYear);
panelNorthWest.add(labelMonth);
panelNorthWest.add(editMonth);
panelNorthWest.add(labelDay);
panelNorthWest.add(editDay);
panel.add(panelNorthEast,"East");
panelNorthEast.setLayout(new GridLayout(2,1,5,5));
panelNorthEast.add(btnOK);
btnOK.addActionListener(this);
panelNorthEast.add(btnCancle);
btnCancle.addActionListener(this);
getContentPane().add(scrollBar);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==btnCancle)
setVisible(false);
else
{
int i;
char c;
for(i=0;i<editYear.getText().length();i++)
{
c=editYear.getText().charAt(i);
if(c<48 || c>57)
{
JOptionPane.showMessageDialog(this,
"你输入的时间有误",
"出错啦",
JOptionPane.OK_OPTION);
return;
}
}
for(i=0;i<editMonth.getText().length();i++)
{
c=editMonth.getText().charAt(i);
if(c<48 || c>57)
{
JOptionPane.showMessageDialog(this,
"你输入的时间有误",
"出错啦",
JOptionPane.OK_OPTION);
return;
}
}
for(i=0;i<editDay.getText().length();i++)
{
c=editDay.getText().charAt(i);
if(c<48 || c>57)
{
JOptionPane.showMessageDialog(this,
"你输入的时间有误",
"出错啦",
JOptionPane.OK_OPTION);
return;
}
}
try{
FileWriter putFile=new FileWriter("Record\\"+editYear.getText()+
"_"+editMonth.getText()+"_"+editDay.getText()+".txt");
putFile.write(textArea.getText());
putFile.close();
JOptionPane.showMessageDialog(this,
"保存成功!",
"提示",
JOptionPane.OK_OPTION);
textArea.setText("");
setVisible(false);
}catch(IOException ex){}
}
}
}
//******************************************************************************
public class CalendarNote
{
public static void main(String args[])
{
Note myNote=new Note();
}
}
//******************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -