日历记事本就是一个日历再加上记事的功能。你可以把将来要做的事情都记在记事本上,等到了那天就会显示出来,你也可以看见你以前做的事情(当然是指纪录在记事本上的)。请各位多多指教! 

import java.awt.*; 

import java.awt.event.*; 

import javax.swing.*; 

import java.util.*; 

import java.text.*; 

import java.io.*; 

public class Note extends Frame { 

private MenuBar mb; 

private Menu mset_param ,mhelp; 

private MenuItem mibc ,miSound; 

private MenuItem miabout; 

//缺省的背景颜色 

private static Color backgroundcolor = Color.GRAY; 

//funtction of the button on plcb is chose year andmonth 

//and set alarm colock and remind booking 

private JCheckBox remindBook ,alarmColock; 

private JComboBox cbyears ,cbmonths; 

private JPanel plcb; 

//日历按钮 

private JPanel plbt; 

private JButton button[]; 

//add vector to contain button[],so that find it 

private Vector v; 

//save the year and month 

private String choseyear ,chosemonth; 

private int choseyearint ,chosemonthint; 

private boolean changed = false; 

private boolean fileExist = false;//the application first run to find file 

private static boolean needSound; 

//add text to write down what to do in the future 

private TextArea tanote; 

private JPanel plta; 

//默认的年份 

private final static String years[]={ 

"1995" ,"1996" ,"1997" ,"1998" ,"1999" ,"2000" , 

"2001" ,"2002" ,"2003" ,"2004" ,"2005" ,"2006" , 

"2007" ,"2008" ,"2009" ,"2010" ,"2011" ,"2012" , 

"2013" ,"2014" ,"2015" ,"2016" ,"2017" ,"2018" , 

"2019" ,"2020" 

}; 

private static final String months[] = { 

"January" ,"February" ,"March" ,"April" ,"May" ,"June" ,"July" ,"August" , 

"September" ,"October" ,"November" ,"December" 

}; 

private final static int dom[] = { 

31 ,28 ,31 ,30 ,31 ,30 ,31 ,31 ,30 ,31 ,30 ,31 

}; 

//save the first day of the month to use 

private int start; 

//save the button who is entered 

private int btnIndex; 

public Note() { 

mb = new MenuBar(); 

mset_param = new Menu("设置"); 

mhelp = new Menu("帮助"); 

mibc = new MenuItem("背景"); 

miSound = new MenuItem("声音"); 

miabout = new MenuItem("关于…"); 

mset_param.add(mibc); 

mset_param.addSeparator(); 

mset_param.add(miSound); 

mhelp.add(miabout); 

setMenuBar(mb); 

mb.add(mset_param); 

mb.setHelpMenu(mhelp); 

MListener ml = new MListener(); 

mibc.addActionListener(ml); 

miabout.addActionListener(ml); 

miSound.addActionListener(ml); 

cbyears = new JComboBox(); 

cbmonths = new JComboBox(); 

plcb = new JPanel(); 

plcb.setLayout(new FlowLayout()); 

JLabel lyears = new JLabel("年份:"); 

JLabel lmonths = new JLabel("月份:"); 

plcb.add(lyears); 

plcb.add(cbyears); 

plcb.add(lmonths); 

plcb.add(cbmonths); 

remindBook = new JCheckBox("预约提示",true); 

alarmColock = new JCheckBox("闹钟"); 

// Dimension d = new Dimension(); 

// remindBook.setSize(d); 

// remindBook.getSize(d); 

// System.out.println("W:"+d.getWidth()+" H:"+d.getHeight()); 

plcb.add(remindBook); 

plcb.add(alarmColock); 

remindBook.addActionListener(new RemindListener()); 

alarmColock.addActionListener(new RemindListener()); 

add(plcb ,BorderLayout.NORTH); 

//add calendar 

getCalendar(); 

plbt = new JPanel(); 

plbt.setBackground(Color.BLUE); 

plbt.setLayout(new GridLayout(7 ,7)); 

plbt.add(new JLabel(" 星期日")); 

plbt.add(new JLabel(" 星期一")); 

plbt.add(new JLabel(" 星期二")); 

plbt.add(new JLabel(" 星期三")); 

plbt.add(new JLabel(" 星期四")); 

plbt.add(new JLabel(" 星期五")); 

plbt.add(new JLabel(" 星期六")); 

//add calendar button to frame 

//add button to vector; 

v = new Vector(); 

button = new JButton[42]; 

for(int i=0;i<41;i++){ 

button[i] = new JButton(); 

plbt.add(button[i]); 

button[i].addActionListener(new ButtonListener()); 

v.add(button[i]); 

button[41] = new JButton(); 

plbt.add(button[41]); 

button[41].setText("保存"); 

button[41].addActionListener(new SaveListener()); 

add(plbt ,BorderLayout.CENTER); 

//add note book 

// plta = new JPanel(); 

tanote = new TextArea(5 ,80); 

// tanote.addTextListener(new tanoteTextListener()); 

// tanote.setColumns(80); 

// plta.add(tanote); 

// tanote.SCROLLBARS_VERTICAL_ONLY; 

add(tanote ,BorderLayout.SOUTH); 

/* 

//add date to button 

GregorianCalendar calendar = new GregorianCalendar(choseyearint ,chosemonthint ,1); 

int start = calendar.get(Calendar.DAY_OF_WEEK)-1; 

int daysInMonth = dom[chosemonthint]; 

if(calendar.isLeapYear(choseyearint)&&chosemonthint == 1){ 

++daysInMonth; 



for(int i =0;i<daysInMonth;i++){ 

button[start+i].setText(" "+(i+1)+" "); 



*/ 

//add the default year and month to JComboBox 

for(int i= 0;i<=25;i++){ 

cbyears.addItem(years[i]); 



for(int i=0;i<12;i++){ 

cbmonths.addItem(months[i]); 



/* 

//add current year and month 

cbyears.setSelectedIndex(choseyearint-1995); 

cbmonths.setSelectedIndex(chosemonthint); 

*/ 

//show date to calendar 

showDate(); 

//open file add to note 

Calendar now = new GregorianCalendar(); 

int num = start + now.get(Calendar.DAY_OF_MONTH)-1; 

btnIndex = num; 

readFile(num); 

fileSound(); 

//add threadcb to listen jcombobox state 

new ThreadCB().start(); 

//listen the JComboBox of years and months 

cbyears.addItemListener(new cbyearsItemListener()); 

cbmonths.addItemListener(new cbmonthsItemListener()); 

addWindowListener(new WindowAdapter() { 

public void windowClosing(WindowEvent e) { 

dispose(); 

System.exit(0); 



}); 

/** 

*add menu listener to know the menu what do want to do 

*/ 

class MListener implements ActionListener{ 

public void actionPerformed(ActionEvent e){ 

MenuItem i = (MenuItem)e.getSource(); 

if(i.equals(miabout)){ 

JOptionPane.showMessageDialog(null ,"日历记事本程序V1.0","关于…" ,JOptionPane.INFORMATION_MESSAGE); 



else if(i.equals(mibc)){ 

//backgroundcolor = Color.BLACK; 

backgroundcolor = JColorChooser.showDialog(null ,"选择颜色…" ,getBackground()); 

setBackground(backgroundcolor); 

plbt.setBackground(backgroundcolor); 

// System.out.println(choseyear); 

 



else{ 

JOptionPane.showMessageDialog(null ,"I am sorry ,this function is not complation" ,"Sorry" ,JOptionPane.INFORMATION_MESSAGE); 





/** 

*add the year JComboBox listener to know what active 

*/ 

class cbyearsItemListener implements ItemListener{ 

public void itemStateChanged(ItemEvent e){ 

// System.out.println(e.paramString()); 

// System.out.println(e.getStateChange()); 

// System.out.println(e.getItem().toString()); 

// if(e.getSource().equals("1997")){ 

// System.out.println("1997 is chosed"); 

// } 

// else{ 

// System.out.println("the System is not chose 1997"); 

// } 

// choseyear = e.getItem().toString(); 

changed = true; 

// showDate(); 

// cbmonths.setSelectedIndex(5); 



/** 

*add the month JComboBox listener to know what active 

*/ 

class cbmonthsItemListener implements ItemListener{ 

public void itemStateChanged(ItemEvent e){ 

// System.out.println(choseyear); 

// chosemonth = e.getItem().toString(); 

changed = true; 

// chosemonthint = Integer.parseInt(chosemonth); 

// System.out.println(chosemonthint); 

// showDate(); 



public static void main(String args[]) { 

System.out.println("Starting Note…"); 

Note mainFrame = new Note(); 

mainFrame.setSize(600, 400); 

mainFrame.setTitle("日历记事本"); 

mainFrame.setBackground(backgroundcolor); 

mainFrame.setVisible(true); 

for(int i=0;i<10;i++){ 

System.out.print("\007"); 



// Thread dd = new ThreadCB(); 

// dd.start(); 

// mainFrame.paintCalendar(); 

protected void getCalendar(){ 

Calendar now = new GregorianCalendar(); 

// System.out.println("year :"+now.get(Calendar.YEAR)); 

// System.out.println("month:"+now.get(Calendar.MONTH)); 

// int y = now.get(Calendar.YEAR); 

// choseyear = Integer.toString(y); 

// int m = now.get(Calendar.MONTH); 

// chosemonth = Integer.toString(m+1); 

choseyearint = now.get(Calendar.YEAR); 

chosemonthint = now.get(Calendar.MONTH); 

// System.out.println("y "+choseyear+"::"+chosemonth); 

/** 

*show date to calendar 

*/ 

protected void showDate(){ 

GregorianCalendar calendar = new GregorianCalendar(choseyearint ,chosemonthint ,1); 

start = calendar.get(Calendar.DAY_OF_WEEK)-1; 

int daysInMonth = dom[chosemonthint]; 

if(calendar.isLeapYear(choseyearint)&&chosemonthint == 1){ 

++daysInMonth; 



for(int i =0;i<daysInMonth;i++){ 

button[start+i].setForeground(Color.BLACK); 

button[start+i].setText(" "+(i+1)+" "); 



//set current day 

int nowDay = start + calendar.get(Calendar.DAY_OF_MONTH); 

button[nowDay+1].setForeground(Color.RED); 

//add current year and month 

cbyears.setSelectedIndex(choseyearint-1995); 

cbmonths.setSelectedIndex(chosemonthint); 

//listen the buttons active 

class ButtonListener implements ActionListener{ 

public void actionPerformed(ActionEvent e){ 

Object obj = e.getSource(); 

// System.out.println("haha"+e.getSource()); 

btnIndex = v.indexOf(obj); 

readFile(btnIndex); 

/* switch(v.indexOf(obj)){ 

case 1: 

System.out.println("i am button1"); 

break; 

case 2: 

// System.out.println("I am button2"); 

readFile(2); 

break; 

case 41: 

System.out.println(tanote.getText()); 

break; 

default: 

System.out.println("I do not know who am I"); 

break; 



*/ } 

/** 

*create a thread to listen the year or month′s state 

*/ 

class ThreadCB extends Thread{ 

public void run(){ 

while(true){ 

if(changed){ 

changed = false; 

choseyearint = cbyears.getSelectedIndex()+1995; 

chosemonthint = cbmonths.getSelectedIndex(); 

//System.out.println("y:"+choseyearint+":M:"+chosemonthint); 

for(int i=0;i<40;i++){ 

button[i].setText(""); 



showDate(); 



try{ 

sleep(200); 



catch(InterruptedException e){ 

System.err.println(e); 







/** 

* add note book listener to know the textarea active 

*/ 

/* 

class tanoteTextListener implements TextListener{ 

public void textValueChanged(TextEvent e){ 

//System.out.println(e.getSource()); 



}*/ 

/** 

*check file to know the file is exist 

* if exist,read it to the note book 

*/ 

protected void readFile(int bt){ 

int y = cbyears.getSelectedIndex()+1995;//real year 

int m = cbmonths.getSelectedIndex()+1;//real month 

String fileName = Integer.toString(y) + Integer.toString(m)+"button"+Integer.toString(bt); 

// System.out.println("I am dudu"); 

// System.out.println(fileName); 

// String fileName = "testDay.java"; 

File file = new File(fileName); 

BufferedReader is; 

String line; 

StringBuffer sb = new StringBuffer(); 

tanote.setText(""); 

if(file.exists()){ 

try{ 

is = new BufferedReader(new FileReader(fileName)); 

while((line = is.readLine())!= null){ 

sb.append(line); 

sb.append("\n"); 



is.close(); 



catch(IOException e){ 

System.err.println(e); 

System.exit(0); 



tanote.setText(sb.toString()); 

fileExist = true; 



else{ 

System.out.println(fileName+" is not exists"); 

/** 

*sound 

*/ 

protected void fileSound(){ 

if(remindBook.isSelected()){ 

if(fileExist){ 

/* for(int i=0;i<10;i++){ 

System.out.println("\007"); 



*/ 

needSound = true; 





/** 

*listen the save button active 

*/ 

class SaveListener implements ActionListener{ 

public void actionPerformed(ActionEvent e){ 

int bt = btnIndex; 

int y = cbyears.getSelectedIndex()+1995;//real year 

int m = cbmonths.getSelectedIndex()+1;//real month 

String fileName = Integer.toString(y) + Integer.toString(m)+"button"+Integer.toString(bt); 

try{ 

BufferedWriter bw = new BufferedWriter(new FileWriter(fileName)); 

//int row = tanote.getRows(); 

//System.out.println("rows:"+row); 

String s = tanote.getText(); 

System.out.println("length:"+s.length()); 

bw.write(s); 

bw.close(); 



catch(IOException ev){ 

System.err.println(ev); 

System.exit(0); 





// 

class RemindListener implements ActionListener{ 

public void actionPerformed(ActionEvent ae){ 

Object obj = ae.getSource(); 

if(obj.equals(remindBook)){ 

if(remindBook.isSelected()){ 

System.out.println("I am selected"); 



else{ 

System.out.println("I am not selected"); 





else{ 

if(alarmColock.isSelected()){ 

// System.out.println("I am selected"); 

final JFrame jf = new JFrame("设置时间"); 

jf.setSize(300,100); 

jf.setLocation(200 ,200); 

jf.setVisible(true); 

// Font f = new Font( ,Font.BOLD ,20); 

JLabel jl = new JLabel("逗你玩"); 

String name=jl.getFont().getName(); 

// System.out.println("Font:"+name);//name′s value is Dialog 

Font f = new Font(name ,Font.BOLD+Font.ITALIC ,20); 

jl.setForeground(Color.red); 

jl.setFont(f); 

jf.getContentPane().setLayout(new GridLayout(5 ,2)); 

jf.getContentPane().add(new JLabel(" ")); 

jf.getContentPane().add(jl); 

jf.getContentPane().add(new JLabel("sorry! this function is not do!!")); 

jf.pack(); 

jf.addWindowListener(new WindowAdapter(){ 

public void windowClosing(WindowEvent we){ 

jf.dispose(); 



}); 



else{ 

System.out.println("I am not selected"); 









}