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

📄 calendarnote.java

📁 一个带备忘录程序
💻 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 + -