成绩:
本科专业实训报告
课题名称:java万年历设计
院系专业:信息工程学院通信工程专业
学号姓名:0967119104 李少华
指导教师:赵建峰
完成日期:2012年6月 28 日星期四
报告正文
一、简介
(1)选题依据:本次课程设计为自选题。思考一段时间后,我决定做一个万年历的设计。主要考虑到自己JAVA课程基础内容掌握并不是很扎实。而而对于设计一个万年历程序,由于其功能简单设计也相对较易,并且通过设计这样的一个日历小组件,也能使自己对JAVA的一些基础知识掌握的更加牢固。
(2)课题基本内容:这个项目是一个简单的Java万年历,可以实现年份为四位数的公历日期的查询,并且在相应的日期做备忘录,以及可以显示当前的系统日期以及时间。
二、主要问题
(1)各个Jpanel的布局问题。本程序中有五个Jpanel。如何使各个容器的布局合理是首要关心的问题;
(2)所选月份天数的算法;
(3)所选月份第一天为星期几的算法;
(4)输出所选月份该月日历的算法;
(5)在选择项中加入showMessageDialog的问题。
三、研究方法
(1)各个Jpanel的布局问题:针对这个问题,使用BorderLayout类。这是一个布置容器的边框布局,它可以对容器组件进行安排,并调整其大小,使其符合下列五个区域:北、南、东、西、中。每个区域最多只能包含一个组件,并通过相应的常量进行标识:NORTH、SOUTH、EAST、WEST、CENTER。当使用边框布局将一个组件添加到容器中时,要使用这五个常量之一。
(2)所选月份天数的算法:用if语句实现。一三五七八十二月份为31天,四六九十一月份为30天,对于二月份进行闰年与非闰年的讨论。
(3)所选月份第一天为星期几的算法:使用get(Calendar.DAY_OF_WEEK)函数实现。
(4)输出所选月份该月日历的算法:算出所选月份第一天为星期几后,把该日期以前的位置用空格补上,并从该日起一次输出天数直到月底。从前面的空格开始算起,把第一天的星期数字减去1后即为此天在该序列中的序号,从此天开始算,利用该序列的序号对6取余得0换行,即可完整的输出该月的日历。
(5)在选择项中加入showMessageDialog的问题:在本程序中,首先定义了关于“版本说明”的适配器,在这个类中定义了这个选择项的actionPerformed 方法。其次,在主程序中为“版本说明”选择项加一个监听器,监听器中调用了刚才定义的适配器。最后,同样在主程序中详细说明actionPerformed 方法。
四、数据分析
package wannianli;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
//import java.sql.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
public class wannianli extends JFrame implements ActionListener, MouseListener
{
private Calendar cld = Calendar.getInstance();
private String [] astr = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"};
private DefaultTableModel dtm = new DefaultTableModel(null,astr);
private JTable table = new JTable(dtm); //装日期的表格
private JScrollPane sp = new JScrollPane(table);
private JButton bLastYear = new JButton("上一年");
private JButton bNextYear = new JButton("下一年");
private JButton bLastMonth = new JButton("上月");
private JButton bNextMonth = new JButton("下月");
private JTextField jtfYear = new JTextField(5);//jtfYear年份显示和输入文本框,允许编辑单行文本
private JTextField jtfMonth = new JTextField(2);//jtfMonth月份显示文本框
private JPanel p1 = new JPanel(); //装入控制日期按钮的模块
private JPanel p2 = new JPanel();
private JPanel p3 = new JPanel(new BorderLayout());
private JPanel p4 = new JPanel(new GridLayout(2,1));
private JPanel p5 = new JPanel(new BorderLayout());
private JButton bAdd = new JButton("保存日志");
private JButton bDel = new JButton("删除日志");
private JTextArea jta = new JTextArea(); //JTextArea 是一个显示纯文本的多行区域
private JScrollPane jsp = new JScrollPane(jta); //管理视口、可选的垂直和水平滚动条以及可选的行和列标题视口
private JLabel l = new JLabel("小提示:可直接输入年份,提高查询效率!");
private JLabel lt = new JLabel();//系统时间
private JLabel ld = new JLabel();//日期是否被选择
private int lastTime;
JMenuBar jmb = new JMenuBar();
JMenu view;
public wannianli()
{
super("万年历"); //框架命名
view = new JMenu("关于");
JMenuItem banben = new JMenuItem("版本说明");
banben.addActionListener(new banben_actionAdapter(this));
view.add(banben);
jmb.add(view);
this.setJMenuBar(jmb);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭函数
this.getContentPane().setLayout(new BorderLayout(10,0));
jta.setLineWrap(true);//获取文本区的换行策略。如果设置为 true,则当行的长度大于所分配的宽度时,将换行。如果设置为 false,则始终不换行。
table.setGridColor(Color.BLACK); //星期之间的网格线是黑色的
table.setColumnSelectionAllowed(true);
table.setSelectionBackground(Color.BLACK);//当选定某一天时这一天背景黑色
table.setSelectionForeground(Color.YELLOW);//选定的日期字体是黄色的
table.setBackground(new Color(200,255,255));//日期显示表格颜色
table.setFont(new Font("黑体",Font.BOLD,24));//日期数字字体格式
table.setRowHeight(30);//表格的高度
table.addMouseListener(this); //鼠标监听器
jtfYear.addActionListener(this);//可输入年份的文本框
//为各个按钮添加监听函数
bAdd.addActionListener(this);
bDel.addActionListener(this);
bLastYear.addActionListener(this);
bNextYear.addActionListener(this);
bLastMonth.addActionListener(this);
bNextMonth.addActionListener(this);
//将按钮添加到Jpanel上
p1.add(bLastYear);
p1.add(jtfYear);//年份输入文本框
p1.add(bNextYear);
p1.add(bLastMonth);
p1.add(jtfMonth);
p1.add(bNextMonth);
p2.add(bAdd);
p2.add(bDel);
p3.add(jsp, BorderLayout.CENTER);
p3.add(p2, BorderLayout.SOUTH);
p3.add(ld, BorderLayout.NORTH);
p4.add(l);
p4.add(lt);
p5.add(p4, BorderLayout.SOUTH);
p5.add(sp, BorderLayout.CENTER);
p5.add(p1, BorderLayout.NORTH);
this.getContentPane().add(p5, BorderLayout.CENTER);
this.getContentPane().add(p3, BorderLayout.EAST);
String [] strDate = DateFormat.getDateInstance().format(new Date()).split("-");//获得日期
cld.set(Integer.parseInt(strDate[0]), Integer.parseInt(strDate[1])-1, 0);
showCalendar(Integer.parseInt(strDate[0]), Integer.parseInt(strDate[1]), cld);
jtfMonth.setEditable(false);//设置月份的文本框为不可编辑
jtfYear.setText(strDate[0]);
jtfMonth.setText(strDate[1]);
this.showTextArea(strDate[2]);
ld.setFont(new Font("新宋体",Font.BOLD,24));
new Timer(lt).start();
this.setBounds(200,200,600,320);
this.setResizable(false);
this.setVisible(true);
}
public void showCalendar(int localYear, int localMonth, Calendar cld)
{
int Days = getDaysOfMonth(localYear, localMonth) + cld.get(Calendar.DAY_OF_WEEK) - 2;
Object [] ai = new Object[7];
lastTime = 0;
for (int i = cld.get(Calendar.DAY_OF_WEEK)-1; i <= Days; i++)
{
ai[i%7] = String.valueOf(i-(cld.get(Calendar.DAY_OF_WEEK)-2));//返回一个表示指定的 int 值的 Integer 实例
if (i%7 == 6)
{
dtm.addRow(ai);
ai = new Object[7];
lastTime++;
}
}
dtm.addRow(ai);
}
public int getDaysOfMonth(int year, int Month) //显示所选月份的天数
{
if(Month == 1 || Month == 3 || Month == 5 || Month == 7 || Month == 8 || Month == 10 || Month == 12)
{
return 31;
}
if(Month == 4 || Month == 6 || Month == 9 || Month == 11)
{
return 30;
}
if(year%4 == 0 && year%100 != 0 || year%400 == 0)//闰年
{
return 29;
}
else
{
return 28;
}
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == jtfYear || e.getSource() == bLastYear || e.getSource() == bNextYear ||
e.getSource() == bLastMonth || e.getSource() == bNextMonth)
{
int m, y;
try//控制输入的年份正确,异常控制
{
if (jtfYear.getText().length() != 4)
{
throw new NumberFormatException();
}
y = Integer.parseInt(jtfYear.getText());
m = Integer.parseInt(jtfMonth.getText());
}
catch (NumberFormatException ex)
{
JOptionPane.showMessageDialog(this, "请输入4位0-9的数字!", "年份有误", JOptionPane.ERROR_MESSAGE);
return;
}
ld.setText("没有选择日期");
for (int i = 0; i < lastTime+1; i++){ dtm.removeRow(0);}
if(e.getSource() == bLastYear){ jtfYear.setText(String.valueOf(--y)); }
if(e.getSource() == bNextYear){jtfYear.setText(String.valueOf(++y)); }
if(e.getSource() == bLastMonth)
{
if(m == 1)
{
jtfYear.setText(String.valueOf(--y));
m = 12;
jtfMonth.setText(String.valueOf(m));
}
else
{
jtfMonth.setText(String.valueOf(--m));
}
}
if(e.getSource() == bNextMonth)
{
if(m == 12)
{
jtfYear.setText(String.valueOf(++y));
m = 1;
jtfMonth.setText(String.valueOf(m));
}
else
{
jtfMonth.setText(String.valueOf(++m));
}
}
cld.set(y, m-1, 0);
showCalendar(y, m, cld);
}
if(e.getSource() == bAdd)
{
int r = table.getSelectedRow();
int c = table.getSelectedColumn();
if(!ld.getText().equals("没有选择日期"))
{
try
{
File file = new File(ld.getText() + ".txt");
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
bw.write(jta.getText());
bw.close();
}
catch (FileNotFoundException ex)
{
ex.printStackTrace();
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
}
if(e.getSource() == bDel)
{
int r = table.getSelectedRow();
int c = table.getSelectedColumn();
File filedel = new File(ld.getText() + ".txt");
if(filedel.exists())
{
if(filedel.delete())
{
jta.setText("日志删除成功");
}
else
{
jta.setText("日志删除失败");
}
}
else
{
jta.setText("没有找到日志文件");
}
}
}
public void mouseClicked(MouseEvent e)
{
jta.setText(null);
int r = table.getSelectedRow();
int c = table.getSelectedColumn();
if (table.getValueAt(r,c) == null)
{
ld.setText("没有选择日期");
}
else
{
this.showTextArea(table.getValueAt(r,c));
}
}
public void mousePressed(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
private void showTextArea(Object selected)
{//将所选日期显示出来
ld.setText(jtfYear.getText()+"年"+jtfMonth.getText()+"月"+selected+"日");
File filein = new File(ld.getText() + ".txt");
if(filein.exists())
{
try
{
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filein)));
String strRead = br.readLine();
jta.setText(null);
while(strRead != null)
{
jta.append(strRead);
strRead = br.readLine();
}
br.close();
}
catch (FileNotFoundException ex)
{
ex.printStackTrace();
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
}
public static void main(String[] args)
{
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
new wannianli();
}
void banben_actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null,"内蒙古科技大学实训课程设计\n课题名称:" +
"万年历\n制作人:李少华\n指导教师:赵建峰\n注释:版权所有,翻版必究!!由于本人水平有限,难免有纰漏,敬请谅解!","说明",
JOptionPane.INFORMATION_MESSAGE);
}
}
class Timer extends Thread//显示系统时间
{
private JLabel lt;
private SimpleDateFormat fy = new SimpleDateFormat("G:yyyy.MM.dd 'at' HH:mm:ss:S Z");
private SimpleDateFormat fn = new SimpleDateFormat("G:yyyy.MM.dd 'at' HH:mm:ss:S Z");
private boolean b = true;
public Timer(JLabel lt)
{
this.lt = lt;
}
public void run()
{
while (true)
{
try
{
if (b)
{
lt.setText(fy.format(new Date()));
}
else
{
lt.setText(fn.format(new Date()));
}
b = !b;
this.sleep(500);
}
catch (InterruptedException ex)
{
ex.printStackTrace();
}
}
}
}
class banben_actionAdapter extends JFrame implements ActionListener{
wannianli adaptee;
banben_actionAdapter(wannianli adaptee){
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.banben_actionPerformed(e);
}
}
五、结论
对于本程序的设计,首先考虑其功能有哪些,需要显示什么,如何进行窗体构建布局,需要用哪些知识点,如相关的类和对象等。最后,就是根据初步设计的功能和布局构架,考虑用源代码进行实现了。
经过了长时间的反复编写调试,课本和网上查阅相关资料相关文章,终于完成了整个课程设计。在这个过程中,在把书本上的知识给系统的复习了一下的同时,同时也发现了自己的太多不足,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。自己的编程方式也不是太标准,经常出现代码写错而调试很久的低级错误情况出现。
通过这次课程设计,我明白了编写程序,不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的结构,编程者更要有严谨地态度。还有通过设计过程中大量地查阅网络文章,对一些关键知识点逐个地了解并解决相关问题。所以网络这个强大的工具,确实是我们学习之中可以借助的一个很好的帮手。网络是我们学习的最好的老师之一。有问题,问网络,是一个很好的习惯。
六、主要参考文献
[1] 吴敏,杨国林.C++面向对象程序设计[M].呼和浩特:内蒙古大学出版社,2006,2-8.
[2] 王羿.基于医学图像的三维可视化研究[D].华中科技大学,2008.
[3] 黄亮.基于皮革胶原显微图像处理与分析的研究与实现[D].陕西科技大学,2006.
[4] 侯俊杰.深入浅出MFC[M].北京:人民邮电出版社,2005,13-16.
[5] 张铮.数字图象处理与机器视觉[M].北京:人民邮电出版社,2010,36-40.
[6] 孟军,赵晶,王凡. C/C++语言程序设计[M].北京:清华大学出版社,2004,25-31.
[7] 霍宏涛.数字图像处理[M].北京:北京理工大学出版社,2002,59-66.
[8] 朱晴婷,黄海鹰,陈莲君. Visual C++程序设计[M].北京:清华大学出版社,2004,40-44.
七、源代码
package wannianli;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
//import java.sql.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
public class wannianli extends JFrame implements ActionListener, MouseListener
{
private Calendar cld = Calendar.getInstance();
private String [] astr = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"};
private DefaultTableModel dtm = new DefaultTableModel(null,astr);
private JTable table = new JTable(dtm); //装日期的表格
private JScrollPane sp = new JScrollPane(table);
private JButton bLastYear = new JButton("上一年");
private JButton bNextYear = new JButton("下一年");
private JButton bLastMonth = new JButton("上月");
private JButton bNextMonth = new JButton("下月");
private JTextField jtfYear = new JTextField(5);//jtfYear年份显示和输入文本框,允许编辑单行文本
private JTextField jtfMonth = new JTextField(2);//jtfMonth月份显示文本框
private JPanel p1 = new JPanel(); //装入控制日期按钮的模块
private JPanel p2 = new JPanel();
private JPanel p3 = new JPanel(new BorderLayout());
private JPanel p4 = new JPanel(new GridLayout(2,1));
private JPanel p5 = new JPanel(new BorderLayout());
private JButton bAdd = new JButton("保存日志");
private JButton bDel = new JButton("删除日志");
private JTextArea jta = new JTextArea(); //JTextArea 是一个显示纯文本的多行区域
private JScrollPane jsp = new JScrollPane(jta); //管理视口、可选的垂直和水平滚动条以及可选的行和列标题视口
private JLabel l = new JLabel("小提示:可直接输入年份,提高查询效率!");
private JLabel lt = new JLabel();//系统时间
private JLabel ld = new JLabel();//日期是否被选择
private int lastTime;
JMenuBar jmb = new JMenuBar();
JMenu view;
public wannianli()
{
super("万年历"); //框架命名
view = new JMenu("关于");
JMenuItem banben = new JMenuItem("版本说明");
banben.addActionListener(new banben_actionAdapter(this));
view.add(banben);
jmb.add(view);
this.setJMenuBar(jmb);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭函数
this.getContentPane().setLayout(new BorderLayout(10,0));
jta.setLineWrap(true);//获取文本区的换行策略。如果设置为 true,则当行的长度大于所分配的宽度时,将换行。如果设置为 false,则始终不换行。
table.setGridColor(Color.BLACK); //星期之间的网格线是黑色的
table.setColumnSelectionAllowed(true);
table.setSelectionBackground(Color.BLACK);//当选定某一天时这一天背景黑色
table.setSelectionForeground(Color.YELLOW);//选定的日期字体是黄色的
table.setBackground(new Color(200,255,255));//日期显示表格颜色
table.setFont(new Font("黑体",Font.BOLD,24));//日期数字字体格式
table.setRowHeight(30);//表格的高度
table.addMouseListener(this); //鼠标监听器
jtfYear.addActionListener(this);//可输入年份的文本框
//为各个按钮添加监听函数
bAdd.addActionListener(this);
bDel.addActionListener(this);
bLastYear.addActionListener(this);
bNextYear.addActionListener(this);
bLastMonth.addActionListener(this);
bNextMonth.addActionListener(this);
//将按钮添加到Jpanel上
p1.add(bLastYear);
p1.add(jtfYear);//年份输入文本框
p1.add(bNextYear);
p1.add(bLastMonth);
p1.add(jtfMonth);
p1.add(bNextMonth);
p2.add(bAdd);
p2.add(bDel);
p3.add(jsp, BorderLayout.CENTER);
p3.add(p2, BorderLayout.SOUTH);
p3.add(ld, BorderLayout.NORTH);
p4.add(l);
p4.add(lt);
p5.add(p4, BorderLayout.SOUTH);
p5.add(sp, BorderLayout.CENTER);
p5.add(p1, BorderLayout.NORTH);
this.getContentPane().add(p5, BorderLayout.CENTER);
this.getContentPane().add(p3, BorderLayout.EAST);
String [] strDate = DateFormat.getDateInstance().format(new Date()).split("-");//获得日期
cld.set(Integer.parseInt(strDate[0]), Integer.parseInt(strDate[1])-1, 0);
showCalendar(Integer.parseInt(strDate[0]), Integer.parseInt(strDate[1]), cld);
jtfMonth.setEditable(false);//设置月份的文本框为不可编辑
jtfYear.setText(strDate[0]);
jtfMonth.setText(strDate[1]);
this.showTextArea(strDate[2]);
ld.setFont(new Font("新宋体",Font.BOLD,24));
new Timer(lt).start();
this.setBounds(200,200,600,320);
this.setResizable(false);
this.setVisible(true);
}
public void showCalendar(int localYear, int localMonth, Calendar cld)
{
int Days = getDaysOfMonth(localYear, localMonth) + cld.get(Calendar.DAY_OF_WEEK) - 2;
Object [] ai = new Object[7];
lastTime = 0;
for (int i = cld.get(Calendar.DAY_OF_WEEK)-1; i <= Days; i++)
{
ai[i%7] = String.valueOf(i-(cld.get(Calendar.DAY_OF_WEEK)-2));//返回一个表示指定的 int 值的 Integer 实例
if (i%7 == 6)
{
dtm.addRow(ai);
ai = new Object[7];
lastTime++;
}
}
dtm.addRow(ai);
}
public int getDaysOfMonth(int year, int Month) //显示所选月份的天数
{
if(Month == 1 || Month == 3 || Month == 5 || Month == 7 || Month == 8 || Month == 10 || Month == 12)
{
return 31;
}
if(Month == 4 || Month == 6 || Month == 9 || Month == 11)
{
return 30;
}
if(year%4 == 0 && year%100 != 0 || year%400 == 0)//闰年
{
return 29;
}
else
{
return 28;
}
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == jtfYear || e.getSource() == bLastYear || e.getSource() == bNextYear ||
e.getSource() == bLastMonth || e.getSource() == bNextMonth)
{
int m, y;
try//控制输入的年份正确,异常控制
{
if (jtfYear.getText().length() != 4)
{
throw new NumberFormatException();
}
y = Integer.parseInt(jtfYear.getText());
m = Integer.parseInt(jtfMonth.getText());
}
catch (NumberFormatException ex)
{
JOptionPane.showMessageDialog(this, "请输入4位0-9的数字!", "年份有误", JOptionPane.ERROR_MESSAGE);
return;
}
ld.setText("没有选择日期");
for (int i = 0; i < lastTime+1; i++){ dtm.removeRow(0);}
if(e.getSource() == bLastYear){ jtfYear.setText(String.valueOf(--y)); }
if(e.getSource() == bNextYear){jtfYear.setText(String.valueOf(++y)); }
if(e.getSource() == bLastMonth)
{
if(m == 1)
{
jtfYear.setText(String.valueOf(--y));
m = 12;
jtfMonth.setText(String.valueOf(m));
}
else
{
jtfMonth.setText(String.valueOf(--m));
}
}
if(e.getSource() == bNextMonth)
{
if(m == 12)
{
jtfYear.setText(String.valueOf(++y));
m = 1;
jtfMonth.setText(String.valueOf(m));
}
else
{
jtfMonth.setText(String.valueOf(++m));
}
}
cld.set(y, m-1, 0);
showCalendar(y, m, cld);
}
if(e.getSource() == bAdd)
{
int r = table.getSelectedRow();
int c = table.getSelectedColumn();
if(!ld.getText().equals("没有选择日期"))
{
try
{
File file = new File(ld.getText() + ".txt");
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
bw.write(jta.getText());
bw.close();
}
catch (FileNotFoundException ex)
{
ex.printStackTrace();
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
}
if(e.getSource() == bDel)
{
int r = table.getSelectedRow();
int c = table.getSelectedColumn();
File filedel = new File(ld.getText() + ".txt");
if(filedel.exists())
{
if(filedel.delete())
{
jta.setText("日志删除成功");
}
else
{
jta.setText("日志删除失败");
}
}
else
{
jta.setText("没有找到日志文件");
}
}
}
public void mouseClicked(MouseEvent e)
{
jta.setText(null);
int r = table.getSelectedRow();
int c = table.getSelectedColumn();
if (table.getValueAt(r,c) == null)
{
ld.setText("没有选择日期");
}
else
{
this.showTextArea(table.getValueAt(r,c));
}
}
public void mousePressed(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
private void showTextArea(Object selected)
{//将所选日期显示出来
ld.setText(jtfYear.getText()+"年"+jtfMonth.getText()+"月"+selected+"日");
File filein = new File(ld.getText() + ".txt");
if(filein.exists())
{
try
{
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filein)));
String strRead = br.readLine();
jta.setText(null);
while(strRead != null)
{
jta.append(strRead);
strRead = br.readLine();
}
br.close();
}
catch (FileNotFoundException ex)
{
ex.printStackTrace();
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
}
public static void main(String[] args)
{
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
new wannianli();
}
void banben_actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null,"内蒙古科技大学实训课程设计\n课题名称:" +
"万年历\n制作人:李少华\n指导教师:赵建峰\n注释:版权所有,翻版必究!!由于本人水平有限,难免有纰漏,敬请谅解!","说明",
JOptionPane.INFORMATION_MESSAGE);
}
}
class Timer extends Thread//显示系统时间
{
private JLabel lt;
private SimpleDateFormat fy = new SimpleDateFormat("G:yyyy.MM.dd 'at' HH:mm:ss:S Z");
private SimpleDateFormat fn = new SimpleDateFormat("G:yyyy.MM.dd 'at' HH:mm:ss:S Z");
private boolean b = true;
public Timer(JLabel lt)
{
this.lt = lt;
}
public void run()
{
while (true)
{
try
{
if (b)
{
lt.setText(fy.format(new Date()));
}
else
{
lt.setText(fn.format(new Date()));
}
b = !b;
this.sleep(500);
}
catch (InterruptedException ex)
{
ex.printStackTrace();
}
}
}
}
class banben_actionAdapter extends JFrame implements ActionListener{
wannianli adaptee;
banben_actionAdapter(wannianli adaptee){
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.banben_actionPerformed(e);
}
}
八、指导教师意见
指导教师签字:
年 月 日