《软件工程,实验二》
题目: GUI与事件处理程序设计实践
源码的github链接: https://github.com/hushaohui0928/test
一、
二、测试分析
异常处理:try {
//创建一个文本写入字符输出流,FIleWriter用来写入字符文件的便捷类
BufferedWriter out = new BufferedWriter(new FileWriter(fname2 + file));
//写入
out.write(s);
//关闭流
out.close();
}
catch (Exception ioe) {
ioe.printStackTrace();
}
try {
//创建一个文件输入字节流
FileInputStream fi = new FileInputStream(fname);
/*fi.available()返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳
过)的估计剩余字节数*/
byte ba[] = new byte[fi.available()];
//从此输入流中将最多ba.length个字节的数据读入到一个byte数组中
fi.read(ba);
//将值赋到文本区中(new String(ba)将字符转换成字符串).
txa.setText(new String(ba));
//关闭输入流
fi.close();
}
catch (IOException ioe) {}
;
}
六、完整代码
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class tt extends Frame implements ActionListener {
static tt frm = new tt();//创建一个菜单栏
static MenuBar menubar = new MenuBar();//创建一个下拉式菜单组件——"文件"
static Menu menu1 = new Menu("文件");//创建一个下拉式菜单组件——"关于"
static Menu menu2 = new Menu("关于");//创建一个菜单的所有项——"打开"
static MenuItem item1 = new MenuItem("打开");//创建一个菜单的所有项——"保存"
static MenuItem item2 = new MenuItem("保存");//创建一个菜单的所有项——"关于我们"
static MenuItem item3 = new MenuItem("关于我们");
//FileDialog 类显示一个对话框窗口,用户可以从中选择文件。
static FileDialog dia1 = new FileDialog(frm, "打开");
//FileDialog.SAVE此常量值指示文件对话框窗口的作用是查找要写入的文件。
static FileDialog dia2 = new FileDialog(frm, "保存", FileDialog.SAVE);
//创建一个文本区
static TextArea txa = new TextArea();
//创建一个窗口事件对象
static WinLis wlis = new WinLis();
public static void main(String agrs[]) {
//创建一个边框布局
BorderLayout br = new BorderLayout();
//设置Frame的title
frm.setTitle("小记事本");
/*将下拉式菜单menu1、menu2添加到菜单栏中*/
menubar.add(menu1);
menubar.add(menu2);
/*将菜单item1、item2添加到下拉式菜单menu1中,将菜单item3添加到下拉式菜单menu2中*/
menu1.add(item1);
menu1.add(item2);
menu2.add(item3);
/*为item1、item2、item3添加指定的动作侦听器,以从此菜单项接收动作事件*/
item1.addActionListener(frm);
item2.addActionListener(frm);
item3.addActionListener(frm);
//将文本去txa添加到Frame中
frm.add(txa);//将此窗体的菜单栏设置为指定的menubar菜单栏。
frm.setMenuBar(menubar);//调整Frame组件的大小宽800高650
frm.setSize(800, 650);//显示组件
frm.setVisible(true);
/*为组件添加窗口事件*/
frm.addWindowListener(wlis);
frm.addWindowListener(wlis);
}
/*窗口事件的实现,在关闭窗口的同时关闭运行程序*/
static class WinLis
extends WindowAdapter {
public void windowClosing(WindowEvent e) {
frm.dispose();
}
}
public void actionPerformed(ActionEvent e) {
//获取当前点击的菜单对象,getSource()返回最初发生 Event 的对象。
MenuItem item = (MenuItem) e.getSource();
if (item == item1) {
dia1.setVisible(true);
/*getDirectory()获取dia1对话框的目录,getFile()获取dia1对话框的选定文件*/
String fname = dia1.getDirectory() + dia1.getFile();
try {//创建一个文件输入字节流
FileInputStream fi = new FileInputStream(fname);
/*fi.available()返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数*/
byte ba[] = new byte[fi.available()];
//从此输入流中将最多ba.length个字节的数据读入到一个byte数组中
fi.read(ba);
//将值赋到文本区中(new String(ba)将字符转换成字符串).
txa.setText(new String(ba));//关闭输入流
fi.close();
}
catch (IOException ioe) {}
;
}
if (item == item2) {
dia2.setVisible(true);
//getDirectory()获取dia2对话框的目录
String fname2 = dia2.getDirectory();
//dia2.getFile()获得dia2对话框中的选定文件,并为其拼接上后缀.txt
File file = new File(dia2.getFile() + ".txt");
//获得文本区中的内容
String s = txa.getText();
try {
//创建一个文本写入字符输出流,FIleWriter用来写入字符文件的便捷类
BufferedWriter out = new BufferedWriter(new FileWriter(fname2 + file));
//写入
out.write(s);//关闭流
out.close();
}
catch (Exception ioe) {
ioe.printStackTrace();
}
}
}
}
七、使用说明与运行结果截图
八、实践总结
这次实验的目的是考察我对Java程序设计知识的掌握熟练程度和实际运用能力。其中设计的知识点有Java图形用户界面设计、Java的异常处理机制、Java中的多线程程序设计、Java输入输出流等。设计程序的时候一定要仔细认真,才能确保粗心类的错误。设计程序时不能没有耐心,遇到错误应该想办法分析问题,不能中途放弃!