package com.yntsoft.student.custom.controller;
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");
}
}
}
}
}