package pac02;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.*;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.util.Iterator;
import java.util.LinkedList;
public class MyCourseDesign {
public static void main(String[] args) {
new InitWindow();
}
}
class MyTable implements ActionListener{ //view
JButton button; //按钮确定输入
JButton nextMonth;
JButton previousMonth;
JButton TableBack;
JTextField inputYear; //输入年份
JComboBox<String>inputmonth; //下拉框选择月份
MyPolice police; //确定按钮的监视器
JLabel yearLabel; //提示年的标签
JLabel monthLabel; //提示月的标签
JLabel NowLabel;
JButton nowButton;
MyCalnadar myCalnadar; //显示日历的主体
JPanel northPanel;
JPanel centralPanel;
JPanel southPanel;
JLayeredPane layeredPane;
JPanel allPanel;
LocalDateTime timeNow;
Timer time;
Box panelBox;
InitWindow win;
MyTable(){
init();
allPanel.setVisible(true);
allPanel.setBounds(200,200,700,500);
}
public void setMyFont(Font font,JComponent...x){
for(JComponent c:x){
c.setFont(font);
}
}
public void init(){
BorderLayout bord = new BorderLayout();
allPanel = new JPanel();
allPanel.setLayout(bord);
TableBack = new JButton("返回");
panelBox = Box.createVerticalBox();
nextMonth = new JButton(">>");
previousMonth = new JButton("<<");
myCalnadar = new MyCalnadar();
police = new MyPolice();
time = new Timer(1000,this);
time.start();
button =new JButton("显示");
inputmonth = new JComboBox<>();
inputYear = new JTextField(6);
yearLabel = new JLabel("输入年:");
monthLabel = new JLabel("请选择月:");
northPanel = new JPanel();
centralPanel = new JPanel();
southPanel = new JPanel();
allPanel = new JPanel();
layeredPane = new JLayeredPane();
String []s1=new String[12];
timeNow = LocalDateTime.now();
NowLabel = new JLabel("现在的时间:"+timeNow.getYear()+"年"+timeNow.getMonth()+"月"+timeNow.getDayOfMonth()+"日"+timeNow.getHour()+":"+timeNow.getMinute()+":"+timeNow.getSecond());
for (int i = 1; i <= 12; i++) {
s1[i-1] = new String(String.valueOf(i));
inputmonth.addItem(s1[i-1]);
}
setWin(win);
police.setView(this);
myCalnadar.setView(this);
myCalnadar.setPanel(centralPanel);
button.addActionListener(police);
Font font = new Font("宋体",Font.BOLD,20);
Font font01 = new Font("楷体",Font.BOLD,30);
setMyFont(font,yearLabel,monthLabel,inputYear,inputmonth,button,nextMonth,previousMonth,NowLabel,button,TableBack);
northPanel.add(TableBack);
northPanel.add(yearLabel);
northPanel.add(inputYear);
northPanel.add(monthLabel);
northPanel.add(inputmonth);
northPanel.add(button);
northPanel.add(previousMonth);
northPanel.add(nextMonth);
TableBack.addActionListener(police);
previousMonth.addActionListener(police);
nextMonth.addActionListener(police);
nowButton= new JButton("");
nowButton.setFont(font01);
panelBox.add(nowButton);
panelBox.add(Box.createVerticalStrut(4));
panelBox.add(NowLabel);
southPanel.add(panelBox);
allPanel.add(northPanel,BorderLayout.NORTH);
allPanel.add(centralPanel,BorderLayout.CENTER);
allPanel.add(southPanel,BorderLayout.SOUTH);
//初始时使日历显示2021年1月的日历
inputYear.setText(2021+"");
myCalnadar.setYear(2021);
myCalnadar.setMonth(1);
myCalnadar.showCalnadar();
nowButton.setText("2021年1月日历");
}
public void actionPerformed(ActionEvent ae){
//实现计时器功能
time.start();
LocalDateTime timeNow = LocalDateTime.now();
NowLabel.setText("现在的时间:"+timeNow.getYear()+"年"+police.Convers(timeNow.getMonth())+"月"+timeNow.getDayOfMonth()+"日"+timeNow.getHour()+":"+timeNow.getMinute()+":"+timeNow.getSecond());
}
public void setWin(InitWindow win){
this.win = win;
}
public void setPanel(JPanel panel){
this.allPanel=panel;
}
}
class MyCalnadar{ //Module
int year;
int month;
GridLayout grid;
JPanel panel;
MyTable view;
public void setView(MyTable view){
this.view=view;
}
public void setPanel(JPanel panel){
this.panel = panel;
}
public void setYear(int year) {
this.year = year;
}
public void setMonth(int month) {
this.month = month;
}
public int getYear() {
return year;
}
public int getMonth() {
return month;
}
public int PrintSpace(DayOfWeek x){
switch (x){
case MONDAY -> {
return 0;
}
case TUESDAY -> {
return 1;
}
case WEDNESDAY -> {
return 2;
}
case THURSDAY -> {
return 3;
}
case FRIDAY -> {
return 4;
}
case SATURDAY -> {
return 5;
}
case SUNDAY -> {
return 6;
}
default -> {
return -1;
}
}
}
public void showCalnadar(){
Font font02 = new Font("楷体",Font.PLAIN,30);
panel.setFont(font02);
panel.setSize(100,100);
Font font01 = new Font("宋体",Font.BOLD,20);
panel.removeAll();
grid = new GridLayout(7,7);
panel.setLayout(grid);
LocalDate date = LocalDate.of(year,month,1);
int days = date.lengthOfMonth();
LocalDate[]dateArray = new LocalDate[days];
for (int i = 0; i < days; i++) {
dateArray[i] =LocalDate.of(year,month,date.getDayOfMonth()+i);
}
String []name = new String[]{"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
//发现显示不了中文
Label []titleWeek= new Label[7];
Label []showDay = new Label[42];
for(int i=0;i<7;i++){
titleWeek[i] = new Label("",Label.CENTER);
titleWeek[i].setText(name[i]+"");
titleWeek[i].setFont(font01);
panel.add(titleWeek[i]);
}
for(int i=0;i<42;i++){
showDay[i] = new Label("",Label.CENTER);
panel.add(showDay[i]);
}
int spaceOfMonth = PrintSpace(dateArray[0].getDayOfWeek());
for (int i = 0; i < spaceOfMonth; i++) {
showDay[i].setText("");
}
for (int i = spaceOfMonth,j=0; j < days; j++,i++) {
showDay[i].setText(""+dateArray[j].getDayOfMonth());
}
panel.repaint();
}
}
class MyPolice implements ActionListener { //Controller
MyTable view;
int year,month;
boolean isShow=true;
boolean canEdit = true;
Font font = new Font("宋体",Font.BOLD,17);
public void setView(MyTable view){
this.view=view;
}
public void actionPerformed(ActionEvent ae){
if(ae.getSource()== view.TableBack){
view.win.card.show(view.win.allPanel,"firstPanel");
}
if(ae.getSource()==view.button){
//显示日历的主体
if(view.inputYear.getText()==null){
//如果根本没有输入年份
canEdit = false;
JLabel label1 = new JLabel("请输入年份!!!");
label1.setFont(font);
label1.setBackground(Color.RED);
JOptionPane.showMessageDialog(view.allPanel,label1,"提示输入提醒",JOptionPane.ERROR_MESSAGE);
}
else{
canEdit = true;
}
try{
//尝试看看输入的年份有没有其他字符
year = Integer.parseInt(view.inputYear.getText());
canEdit = true;
}
catch (NumberFormatException exp){
canEdit = false;
JLabel label1 = new JLabel("输入的年份不要包含除数字之外的其他格式!!!");
label1.setFont(font);
view.inputYear.setText(2021+"");
label1.setForeground(Color.RED);
JOptionPane.showMessageDialog(view.allPanel,label1,"输入格式提醒",JOptionPane.ERROR_MESSAGE);
isShow=false;
view.inputYear.requestFocus();
}
if(view.inputYear.getText()!=null&&(year>3500||year<1500)){
//检查输入的年份有没有超出范围
canEdit = false;
JLabel label1 = new JLabel("年份超出范围!请在1500-3500之间输入");
label1.setFont(font);
view.inputYear.setText("2021");
label1.setForeground(Color.RED);
JOptionPane.showMessageDialog(view.allPanel,label1,"超出范围提醒",JOptionPane.ERROR_MESSAGE);
isShow=false;
// view.inputYear.setText(null);
view.inputYear.requestFocus();
}
else{
canEdit = true;
}
try{
//操作选中的月份
int month = Integer.parseInt(view.inputmonth.getSelectedItem().toString());
canEdit = true;
}
catch (Exception exp){
canEdit = false;
JLabel label1 = new JLabel("您还未选择月份!!!");
label1.setFont(font);
label1.setForeground(Color.RED);
JOptionPane.showMessageDialog(view.allPanel,label1,"提示选择提醒",JOptionPane.ERROR_MESSAGE);
isShow=false;
}
//根据输入的数据显示日历
int year = Integer.parseInt(view.inputYear.getText());
int month = Integer.parseInt(view.inputmonth.getSelectedItem().toString());
view.myCalnadar.setYear(year);
view.myCalnadar.setMonth(month);
}
if(ae.getSource()==view.nextMonth){
//按按钮以显示下一个月的日历
if(canEdit){
int year = view.myCalnadar.getYear();
int month = view.myCalnadar.getMonth();
if(month==12){
view.myCalnadar.setYear(year+1);
view.myCalnadar.setMonth(1);
}
else{
view.myCalnadar.setMonth(month+1);
}
}
else{
JLabel label1 = new JLabel("请先显示日历后再按按钮挑战月份!");
label1.setFont(font);
label1.setForeground(Color.RED);
JOptionPane.showMessageDialog(view.allPanel,label1,"错误选择提醒",JOptionPane.ERROR_MESSAGE);
}
}
if(ae.getSource()== view.previousMonth){
//按按钮以显示上一个月的日历
if(canEdit){
int year = view.myCalnadar.getYear();
int month = view.myCalnadar.getMonth();
if(month==1){
view.myCalnadar.setYear(year-1);
view.myCalnadar.setMonth(12);
}
else{
view.myCalnadar.setMonth(month-1);
}
}
else {
JLabel label1 = new JLabel("请先显示日历后再按按钮挑战月份!");
label1.setFont(font);
label1.setForeground(Color.RED);
JOptionPane.showMessageDialog(view.allPanel,label1,"错误选择提醒",JOptionPane.ERROR_MESSAGE);
}
}
if(isShow&canEdit){
//根据有没有错误数据来显示日历主体
view.myCalnadar.showCalnadar();
view.nowButton.setText(view.myCalnadar.getYear()+"年"+ view.myCalnadar.getMonth()+"月的日历");
view.nowButton.setBackground(Color.WHITE);
}
isShow=true;
}
public int Convers(Month m){
switch (m){
case JANUARY -> {
return 1;
}
case FEBRUARY -> {
return 2;
}
case MARCH -> {
return 3;
}
case APRIL -> {
return 4;
}
case MAY -> {
return 5;
}
case JUNE -> {
return 6;
}
case JULY -> {
return 7;
}
case AUGUST -> {
return 8;
}
case SEPTEMBER -> {
return 9;
}
case OCTOBER -> {
return 10;
}
case NOVEMBER -> {
return 11;
}
case DECEMBER -> {
return 12;
}
default -> {
return -1;
}
}
}
}
class InitWindow extends JFrame implements ActionListener{
JButton showCal;
JButton showMes;
JButton showOpe;
JPanel CalPanel;
JPanel MesPanel;
JPanel OpePanel;
JLabel imageLabel;
JPanel imagePanel;
JPanel allPanel;
JPanel firstPanel;
JLayeredPane layeredPane;
ImageIcon icon;
Box baseBox;
Box box1;
Box box2;
Font font,font01;
JLabel hiLabel;
JLabel opeLabel;
JLabel spaceLabel;
JLabel imaLabel;
CardLayout card;
MessageWindow mesWin;
MyTable tabWin;
OperateWindow opeWin;
InitWindow(){
init();
setBounds(200,200,700,500);
setVisible(true);
setTitle("自制多功能日历器");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void init(){
mesWin = new MessageWindow();
mesWin.setView(this);
tabWin = new MyTable();
tabWin.setWin(this);
opeWin = new OperateWindow();
opeWin.setView((this));
card = new CardLayout();
CalPanel = new JPanel();
OpePanel = new JPanel();
MesPanel = new JPanel();
allPanel = new JPanel();
firstPanel = new JPanel();
allPanel.setLayout(card);
allPanel.add("OpePanel",opeWin.allPanel);
allPanel.add("MesPanel",mesWin.allPanel);
allPanel.add("CalPanel",tabWin.allPanel);
allPanel.add("firstPanel",firstPanel);
//对应3个窗口
showCal = new JButton("查看日历");
showMes = new JButton("查看节日");
showOpe = new JButton("查看日程");
showOpe.addActionListener(this);
showMes.addActionListener(this);
showCal.addActionListener(this);
font = new Font("微软雅黑",Font.ITALIC,20);
font01 = new Font("宋体",Font.PLAIN,50);
hiLabel = new JLabel("你好,Calendar");
// imagePanel.setSize(icon.getIconWidth(),icon.getIconHeight());
// imagePanel.add(imageLabel,BorderLayout.CENTER);
setBox();
// layeredPane.add(imagePanel,JLayeredPane.MODAL_LAYER);
// layeredPane.add(baseBox,JLayeredPane.DEFAULT_LAYER);
firstPanel.add(baseBox);
// opePanel.add(hiLabel,BorderLayout.NORTH);
// setLayeredPane(layeredPane);
card.show(allPanel,"firstPanel");
setMyFont(font,showOpe,showMes,showCal,spaceLabel,opeLabel);
hiLabel.setFont(font01);
add(allPanel);
mesWin = new MessageWindow();
// this.MesPanel = mesWin.allPanel;
}
public void setMyFont(Font font,JComponent...x){
for(JComponent c:x){
c.setFont(font);
}
}
public void setBox(){
opeLabel = new JLabel("功能选项");
spaceLabel = new JLabel(" ");
box1 = Box.createVerticalBox();
box1.add(Box.createVerticalStrut(50));
box1.add(opeLabel);
box1.add(Box.createVerticalStrut(25));
box1.add(showCal);
box1.add(Box.createVerticalStrut(50));
box1.add(showMes);
box1.add(Box.createVerticalStrut(50));
box1.add(showOpe);
box2 = Box.createVerticalBox();
// box2.add(Box.createVerticalStrut(50));
box2.add(hiLabel);
box2.add(Box.createVerticalStrut(50));
box2.add(spaceLabel);
box2.add(Box.createVerticalStrut(50));
box2.add(spaceLabel);
baseBox = Box.createHorizontalBox();
baseBox.add(box1);
baseBox.add(Box.createHorizontalStrut(100));
baseBox.add(box2);
baseBox.setOpaque(false);
box1.setOpaque(false);
box2.setOpaque(false);
}
public void actionPerformed(ActionEvent ae){
if(ae.getSource()==showCal){
card.show(allPanel,"CalPanel");
}
if(ae.getSource()==showMes){
card.show(allPanel,"MesPanel");
}
if(ae.getSource()==showOpe){
card.show(allPanel,"OpePanel");
}
}
}
class MessageWindow implements ActionListener{ //还有节假日的图片与信息没填
Box baseBox;
Box box1;
Box box2;
InitWindow view;
JLabel imageLabelOfSolar;
JLabel imageLabelOfFesti;
JLabel showLabel;
CardLayout card = null;
JTextArea showAreaSolar;
JTextArea showAreaFesti;
JPanel panelOfSolar;
JPanel panelOfFesti;
JPanel allPanel; //在主窗口显示的面板,以cardlayout布局
JPanel firstPanel;
ImageIcon icon;
JComboBox<String>comboBoxOfSolar;
JComboBox<String>comboBoxOfFesti;
JButton enterSolar;
JButton enterFesti;
JButton solarButton,festiButton;
JButton solarToFirst,festiToFirst,firstToMain;
Font font;
File file=null;
FileReader read=null;
BufferedReader reader=null;
MessageWindow(){
init();
allPanel.setBounds(200,200,700,500);
// allPanel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
allPanel.setVisible(true);
// allPanel.setTitle("查看节气");
allPanel.validate();
}
public void init(){
font = new Font("微软雅黑",Font.PLAIN,20);
card = new CardLayout();
setSolarPanel();
setFestiPanel();
setFirstPanel();
allPanel = new JPanel();
allPanel.setLayout(card);
allPanel.add("solar",panelOfSolar);
allPanel.add("festi",panelOfFesti);
allPanel.add("first",firstPanel);
card.show(allPanel,"first");
enterFesti.addActionListener(this);
enterSolar.addActionListener(this);
solarButton.addActionListener(this);
festiButton.addActionListener(this);
solarToFirst.addActionListener(this);
festiToFirst.addActionListener(this);
setMyFont(font,solarButton,festiButton,solarToFirst,festiToFirst,firstToMain);
}
public void actionPerformed(ActionEvent ae){
if(ae.getSource()==firstToMain){
view.card.show(view.allPanel,"firstPanel");
}
if(ae.getSource()==solarButton){
card.show(allPanel,"solar");
}
if(ae.getSource()==festiButton){
card.show(allPanel,"festi");
}
if(ae.getSource()==solarToFirst){
card.show(allPanel,"first");
}
if(ae.getSource()==festiToFirst){
card.show(allPanel,"first");
}
if(ae.getSource()==enterFesti){
//这里要用文件操作
showAreaFesti.setText(null);
String str = comboBoxOfFesti.getSelectedItem().toString();
icon = new ImageIcon(str+".png");
imageLabelOfFesti.setIcon(icon);
file = new File("festival.txt");
try{
read = new FileReader(file);
reader = new BufferedReader(read);
String tar=null;
while((tar=reader.readLine())!=null){
if(tar.equals("0000"+str)){
String content = reader.readLine();
for (int i = 0; i < content.length(); i++) {
showAreaFesti.append(""+content.charAt(i));
if(i%8==0){
showAreaFesti.append("\n");
}
}
}
}
reader.close();
read.close();
}
catch (IOException ioexp){
showAreaSolar.setText("无资料");
}
}
if(ae.getSource()==enterSolar){
showAreaSolar.setText(null);
String str = comboBoxOfSolar.getSelectedItem().toString();
icon = new ImageIcon(str+".png");
imageLabelOfSolar.setIcon(icon);
file = new File("solar.txt");
try{
read = new FileReader(file);
reader = new BufferedReader(read);
String tar=null;
while((tar=reader.readLine())!=null){
if(tar.equals("0000"+str)){
String content = reader.readLine();
for (int i = 0; i < content.length(); i++) {
showAreaSolar.append(""+content.charAt(i));
if(i%8==0){
showAreaSolar.append("\n");
}
}
}
}
reader.close();
read.close();
}
catch (IOException ioexp){
showAreaSolar.setText("无资料");
}
//showArea里面的内容也要用到文件操作
}
}
public void setMyFont(Font font,JComponent...x){
for(JComponent c:x){
c.setFont(font);
}
}
public void setSolarPanel(){
solarToFirst = new JButton("返回");
panelOfSolar = new JPanel();
BorderLayout bord = new BorderLayout();
// panelOfSolar.setLayout(bord);
enterSolar = new JButton("确定");
//二十四节气面板加入box和显示图片的label
baseBox = Box.createHorizontalBox();
showAreaSolar = new JTextArea(10,10);
showAreaSolar.setEditable(false);
imageLabelOfSolar = new JLabel();
imageLabelOfSolar.setSize(250,300);
/
// icon = new ImageIcon("原始.png");
// imageLabelOfSolar.setIcon(icon);
/
showLabel = new JLabel("请选择节气");
comboBoxOfSolar = new JComboBox<>();
String[]solar={"立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至","小寒","大寒"};
for (String s : solar) {
comboBoxOfSolar.addItem(s);
}
box1 = Box.createHorizontalBox();
box1.add(new JScrollPane(showAreaSolar));
box1.add(Box.createHorizontalStrut(12));
box1.add(imageLabelOfSolar);
box2 = Box.createHorizontalBox();
box2.add(solarToFirst);
box2.add(Box.createHorizontalStrut(10));
box2.add(showLabel);
box2.add(Box.createHorizontalStrut(10));
box2.add(comboBoxOfSolar);
box2.add(Box.createHorizontalStrut(30));
box2.add(enterSolar);
baseBox = Box.createVerticalBox();
baseBox.add(box2);
baseBox.add(Box.createVerticalStrut(20));
baseBox.add(box1);
panelOfSolar.add(baseBox,BorderLayout.CENTER);
setMyFont(font,showAreaSolar,showLabel,comboBoxOfSolar,enterSolar);
}
public void setFestiPanel(){
festiToFirst = new JButton("返回");
String[] festi={"元旦","春节","清明节","妇女节","植树节","劳动节","青年节","端午节","儿童节","建党节","建军节","教师节","中秋节","国庆节"};
comboBoxOfFesti = new JComboBox<>();
for(String s:festi){
comboBoxOfFesti.addItem(s);
}
showAreaFesti = new JTextArea(10,10);
showAreaFesti.setEditable(false);
showLabel = new JLabel("请选择节日:");
enterFesti = new JButton("确定");
panelOfFesti = new JPanel();
imageLabelOfFesti = new JLabel();
// icon = new ImageIcon("原始.png");
// imageLabelOfFesti.setIcon(icon);
imageLabelOfFesti.setSize(250,300);
box1 = Box.createHorizontalBox();
box1.add(festiToFirst);
box1.add(Box.createHorizontalStrut(10));
box1.add(showLabel);
box1.add(Box.createHorizontalStrut(10));
box1.add(comboBoxOfFesti);
box1.add(Box.createHorizontalStrut(30));
box1.add(enterFesti);
box2 = Box.createHorizontalBox();
box2.add(new JScrollPane(showAreaFesti));
box2.add(Box.createHorizontalStrut(20));
box2.add(imageLabelOfFesti);
baseBox = Box.createVerticalBox();
baseBox.add(box1);
baseBox.add(Box.createVerticalStrut(20));
baseBox.add(box2);
// panelOfFesti.add(northPanel,BorderLayout.NORTH);
panelOfFesti.add(baseBox,BorderLayout.CENTER);
setMyFont(font,comboBoxOfFesti,showLabel,showAreaFesti,enterFesti);
}
public void setPanel(JPanel panel){
this.allPanel=panel;
}
public void setView(InitWindow view){
this.view=view;
}
public void setFirstPanel(){
firstToMain = new JButton("返回");
firstToMain.addActionListener(this);
firstPanel = new JPanel();
BorderLayout bord = new BorderLayout();
firstPanel.setLayout(bord);
solarButton = new JButton("查看二十四节气");
festiButton = new JButton("查看节日");
box1 = Box.createVerticalBox();
box1.add(Box.createVerticalStrut(40));
box1.add(solarButton);
box2=Box.createVerticalBox();
box2.add(Box.createVerticalStrut(40));
box2.add(festiButton);
baseBox = Box.createHorizontalBox();
baseBox.add(Box.createHorizontalStrut(50));
baseBox.add(box1);
baseBox.add(Box.createHorizontalStrut(50));
baseBox.add(box2);
baseBox.add(Box.createHorizontalStrut(50));
box1 = Box.createVerticalBox();
box1.add(Box.createVerticalStrut(40));
box1.add(firstToMain);
baseBox.add(box1);
baseBox.add(Box.createHorizontalStrut(50));
firstPanel.add(baseBox,BorderLayout.CENTER);
}
}
class OperateWindow implements ActionListener, ItemListener {
CardLayout card = null;
Box baseBox;
Box box1;
Box box2;
Box box3;
JPanel allPanel;
JPanel viewPanel;
JPanel addPanel;
JPanel firstPanel;
JPanel selectPanel;
JButton viewButton;
JButton addButton;
JCheckBox[] checkArray;
JButton enterOfView;
JButton enterOfAdd;
JButton viewBack;
JButton addBack;
JButton firstBack;
JButton cleanButton;
JComboBox<String> comboBox;
JComboBox<String> comboBoxHour;
JComboBox<String> comboBoxMinute;
JTextArea inputArea;
JLabel tipLabel;
JLabel dateLabel;
JLabel titleLabel;
Font font01, font02;
File file = null;
FileReader read = null;
BufferedReader Reader = null;
FileWriter write = null;
BufferedWriter Writer = null;
InitWindow view;
OperateWindow() {
init();
allPanel.setVisible(true);
allPanel.setBounds(200, 200, 700, 500);
}
public void init() {
font01 = new Font("微软雅黑", Font.PLAIN, 15);
font02 = new Font("宋体", Font.BOLD, 20);
checkArray = new JCheckBox[10];
comboBoxHour = new JComboBox<>();
comboBoxMinute = new JComboBox<>();
for (int i = 0; i < 24; i++) {
String hour = i + "";
comboBoxHour.addItem(hour);
}
for (int i = 0; i < 60; i++) {
String minute = i + "";
comboBoxMinute.addItem(minute);
}
for (int i = 0; i < 10; i++) {
checkArray[i] = new JCheckBox();
checkArray[i].addItemListener(this);
}
createViewPanel();
createAddPanel();
createFirstPanel();
allPanel = new JPanel();
card = new CardLayout();
allPanel.setLayout(card);
allPanel.add("view", viewPanel);
allPanel.add("add", addPanel);
allPanel.add("first", firstPanel);
card.show(allPanel, "first");
setMyFont(font02, enterOfAdd, enterOfView, tipLabel, inputArea, addButton, viewButton, comboBoxHour, comboBoxMinute, dateLabel, firstBack);
addButton.addActionListener(this);
viewButton.addActionListener(this);
}
public void createViewPanel() {
viewPanel = new JPanel();
BorderLayout bord = new BorderLayout();
viewPanel.setLayout(bord);
tipLabel = new JLabel("您还有以下未完成的事项");
enterOfView = new JButton("确定");
viewBack = new JButton("返回");
cleanButton = new JButton("清除");
viewBack.addActionListener(this);
enterOfView.addActionListener(this);
cleanButton.addActionListener(this);
tipLabel = new JLabel("您还有以下日程没完成");
setMyFont(font02, tipLabel, cleanButton);
showViewPanel();
}
public void setView(InitWindow view) {
this.view = view;
}
public void createAddPanel() {
addPanel = new JPanel();
BorderLayout bord = new BorderLayout();
addPanel.setLayout(bord);
tipLabel = new JLabel("在未来一周内添加事件");
inputArea = new JTextArea(5, 10);
inputArea.requestFocus();
comboBox = new JComboBox<>();
enterOfAdd = new JButton("确定");
enterOfAdd.addActionListener(this);
addBack = new JButton("返回");
addBack.addActionListener(this);
LocalDate date = LocalDate.now();
int count = 0;
String str = null;
setMyFont(font02, comboBox, tipLabel);
setMyFont(font01, inputArea);
while (count < 7) {
int year = date.getYear();
int month = date.getMonthValue();
int Day = date.getDayOfMonth();
str = year + "-" + month + "-" + Day;
comboBox.addItem(str);
date = date.plusDays(1);
count++;
}
box1 = Box.createVerticalBox();
box1.add(inputArea);
box1.add(Box.createVerticalStrut(100));
box2 = Box.createHorizontalBox();
box2.add(addBack);
box2.add(Box.createHorizontalStrut(10));
dateLabel = new JLabel("选择日期");
dateLabel.setFont(font02);
box2.add(dateLabel);
box2.add(Box.createHorizontalStrut(10));
box2.add(comboBox);
box2.add(Box.createHorizontalStrut(10));
dateLabel = new JLabel("选择小时");
dateLabel.setFont(font02);
box2.add(dateLabel);
box2.add(Box.createHorizontalStrut(10));
box2.add(comboBoxHour);
box2.add(Box.createHorizontalStrut(10));
dateLabel = new JLabel("选择分钟");
box2.add(dateLabel);
box2.add(Box.createHorizontalStrut(10));
box2.add(comboBoxMinute);
addPanel.add(box2, BorderLayout.NORTH);
addPanel.add(box1, BorderLayout.CENTER);
addPanel.add(enterOfAdd, BorderLayout.SOUTH);
}
public void createFirstPanel() {
firstBack = new JButton("返回");
firstBack.addActionListener(this);
firstPanel = new JPanel();
BorderLayout bord = new BorderLayout();
firstPanel.setLayout(bord);
viewButton = new JButton("查看日程");
addButton = new JButton("添加日程");
box1 = Box.createVerticalBox();
box1.add(Box.createVerticalStrut(40));
box1.add(viewButton);
box2 = Box.createVerticalBox();
box2.add(Box.createVerticalStrut(40));
box2.add(addButton);
baseBox = Box.createHorizontalBox();
baseBox.add(Box.createHorizontalStrut(50));
baseBox.add(box1);
baseBox.add(Box.createHorizontalStrut(50));
baseBox.add(box2);
baseBox.add(Box.createHorizontalStrut(50));
box1 = Box.createVerticalBox();
box1.add(firstBack);
box1.add(Box.createVerticalStrut(80));
baseBox.add(box1);
baseBox.add(Box.createHorizontalStrut(50));
firstPanel.add(baseBox, BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent ae) {
if (ae.getSource() == enterOfAdd) {
try {
file = new File("ToDoList.txt");
read = new FileReader(file);
Reader = new BufferedReader(read);
String str01 = null;
int count = 0;
while ((str01 = Reader.readLine()) != null) {
count++;
}
if (count == 10) {
JLabel warn = new JLabel("日程已经超出最大数!");
warn.setFont(font02);
JOptionPane.showMessageDialog(allPanel, warn, "超限提示框", JOptionPane.ERROR_MESSAGE);
inputArea.setText(null);
return;
}
Reader.close();
read.close();
int hour = Integer.parseInt(comboBoxHour.getSelectedItem().toString());
int minute = Integer.parseInt(comboBoxMinute.getSelectedItem().toString());
String hour02 = null;
String minute02 = null;
if (hour < 10) {
hour02 = "0" + hour;
} else {
hour02 = hour + "";
}
if (minute < 10) {
minute02 = "0" + minute;
} else {
minute02 = minute + "";
}
if (inputArea.getText().equals("")) {
JLabel warn = new JLabel("请至少输入一个字符");
warn.setFont(font02);
JOptionPane.showMessageDialog(this.allPanel, warn, "提醒输入框", JOptionPane.ERROR_MESSAGE);
return;
}
String str02 = inputArea.getText().replace("\n", "");
if (str02.length() == 0) {
JOptionPane.showMessageDialog(this.allPanel, "请至少输入一个字符", "提醒款", JOptionPane.ERROR_MESSAGE);
inputArea.setText(null);
inputArea.requestFocus();
return;
}
String mess = comboBox.getSelectedItem().toString() + "-" + hour02 + ":" + minute02 + str02;
file = new File("ToDoList.txt");
write = new FileWriter(file, true);
Writer = new BufferedWriter(write);
Writer.write(mess + "\n");
Writer.close();
write.close();
} catch (IOException exp) {
}
inputArea.setText(null);
inputArea.requestFocus();
JLabel warn = new JLabel("创建日程成功!");
warn.setFont(font02);
JOptionPane.showMessageDialog(this.allPanel, warn, "提示框", JOptionPane.ERROR_MESSAGE);
}
if (ae.getSource() == viewButton) {
card.show(allPanel, "view");
showViewPanel();
}
if (ae.getSource() == addButton) {
card.show(allPanel, "add");
}
if (ae.getSource() == viewBack) {
card.show(allPanel, "first");
}
if (ae.getSource() == addBack) {
card.show(allPanel, "first");
}
if (ae.getSource() == firstBack) {
view.card.show(view.allPanel, "firstPanel");
}
if (ae.getSource() == cleanButton) {
int n = JOptionPane.showConfirmDialog(this.allPanel, "确认全部清除?", "提醒框", JOptionPane.YES_NO_OPTION);
if (n == JOptionPane.YES_OPTION) {
file = new File("ToDoList.txt");
try {
FileOutputStream out = new FileOutputStream(file);
}
catch (IOException exp) {}
showViewPanel();
}
}
if (ae.getSource() == enterOfView) {
showViewPanel();
}
}
public void setMyFont(Font font, JComponent... x) {
for (JComponent c : x) {
c.setFont(font);
}
}
public void showViewPanel() {
file = new File("ToDoList.txt");
box2=Box.createVerticalBox();
// if (file.length() == 0) {
// JOptionPane.showMessageDialog(this.allPanel, "没有安排任何日程", "提醒框", JOptionPane.ERROR_MESSAGE);
// }
try {
read = new FileReader(file);
Reader = new BufferedReader(read);
String str = null;
int i = 0;
String day01 = null;
String day02 = null;
while ((str = Reader.readLine()) != null) {
day01 = str.substring(0, 10);
if (day02 != null) {
if (!day02.equals(day01)) {
//如果上一条的日期和现在一条的日期不一样,则另外创建一个titlLabel;
titleLabel = new JLabel(day01);
titleLabel.setFont(font01);
box2.add(titleLabel);
box2.add(Box.createVerticalStrut(5));
}
}
if (day02 == null) {
titleLabel = new JLabel(day01);
titleLabel.setFont(font01);
box2.add(titleLabel);
box2.add(Box.createVerticalStrut(5));
}
day02 = day01;
String rest = str.substring(10);
String time = rest.substring(1, 6); //几点几分
String content = rest.substring(6); //代办事项
checkArray[i] = new JCheckBox(content + "(" + time + ")");
checkArray[i].setFont(font02);
checkArray[i].addItemListener(this);
box2.add(checkArray[i]);
box2.add(Box.createVerticalStrut(1));
i++;
}
Reader.close();
read.close();
} catch (IOException ioexp) {
}
viewPanel.removeAll();
box1=Box.createHorizontalBox();
box1.add(viewBack);
box1.add(Box.createHorizontalStrut(20));
tipLabel = new JLabel("您还有以下日程未完成:");
tipLabel.setFont(font02);
box1.add(tipLabel);
baseBox = Box.createHorizontalBox();
baseBox.add(Box.createHorizontalStrut(200));
baseBox.add(enterOfView);
baseBox.add(Box.createHorizontalStrut(20));
baseBox.add(cleanButton);
baseBox.add(Box.createHorizontalStrut(20));
viewPanel.add(box1, BorderLayout.NORTH);
viewPanel.add(box2,BorderLayout.CENTER);
viewPanel.add(baseBox, BorderLayout.SOUTH);
}
public void itemStateChanged(ItemEvent it) {
JCheckBox check = (JCheckBox) it.getSource();
file = new File("ToDoList.txt");
LinkedList<String> list = new LinkedList<>();
try {
read = new FileReader(file);
Reader = new BufferedReader(read);
String str = null;
while ((str = Reader.readLine()) != null) {
String regax = "[1234567890.:-]";
String str1 = str.replaceAll(regax, "");
// System.out.println(str1);
if (!check.getText().contains(str1)) {
list.add(str);
}
}
try {
FileOutputStream out = new FileOutputStream(file);
}
catch (IOException ioe) {}
Reader.close();
read.close();
write = new FileWriter(file);
Writer = new BufferedWriter(write);
Iterator<String> iter = list.iterator();
while (iter.hasNext()) {
String tar = iter.next();
// System.out.println(tar);
Writer.write(tar + "\n");
}
Writer.close();
write.close();
}
catch (IOException exp) {}
}
}