Java之记事本
实验五 I/O实验一、实验目的练习输入/输出流的创建、转换及数据访问设计方法。二、实验内容1、采用Java Application方式建立应用程序框架;2、仿照Windows记事本,实现界面设计;3、完成菜单(新建、打开、保存、另存为)设计及事件设计。三、实验设计(反映设计原理、设计方法、设计过程、设计结果)®菜单区1:首先需要一个容器来放置文件格式等按...
实验五 I/O实验
一、实验目的
练习输入/输出流的创建、转换及数据访问设计方法。
二、实验内容
1、采用Java Application方式建立应用程序框架;
2、仿照Windows记事本,实现界面设计;
3、完成菜单(新建、打开、保存、另存为)设计及事件设计。
三、实验设计
(反映设计原理、设计方法、设计过程、设计结果)
®菜单区
1:首先需要一个容器来放置文件格式等按钮,这里就用到一个新东西(Jmenubar),在menu下找到。
2:容器设置好了就要来设置容器里装的东西,也就是菜单(Jmenu),需要设置几个菜单按钮就添加几个Jmenu即可,并且修改好相关参数,这里设置了文件、编辑、格式、和帮助视图5个按钮,只是为了界面完整,有些并不能做功能设置。
3:接下来还需要每一个按钮的下拉菜单,这里要用到JmenuItem按钮,直接将JmenuItem拉到Jmenu下面,需要多少个就拉多少个,并且修改好相关参数。
4:这样记事本Application界面的上面部分GUI就实现了。也就是如下图的样子
®文本区域
1:记事本除了菜单功能区剩下的全都是文本区域,那么怎么展现一个文本区呢,并且这个文本区还要有滚动条或者具有滚动条的功能。
2:首先添加一个JScrollPane,这里是一个包含滚动条的面板,包含在Containers里面,直接拖到界面上即可。
2:接下来直接添加JtextArea,用来放置文本内容,在Components里面,
3:这样就做好了记事本下面部分。
4:跑一下程序看看
5:当文本内容过多时会自动出现滚动条,这样就把记事本的整个界面设计好了,接下来就是事件设计。
:
四、实验过程
(反映实验的基本过程,重点体现实验中遇到的问题和解决方案)
1:记事本界面设计好了, 就是添加事件,对于设置了功能的按钮设置事件,有的按钮只是为了界面需要设置了,但是不做功能使用。这里主要就是打开,新建,保存,另存为。
2:针对于打开,上课时老师详细讲述了打开的实现,但是上课时照着老师敲的代码依然无法打开,下来的时候多方查阅资料问同学,才发现是自己在设置文本区域读入文件的时候出了问题,导致无法显示打开的文件的内容,经过修改以后,可以显示了。
3:针对于保存,判断文本是否要保存,然后将文本框上的内容读入文件流,并且保存在文件流里就可以了。
4:针对于新建,只需要判断文本区域里面是否有内容,如果有的话,弹出询问窗口,是否保存,如果保存,就执行保存,然后清空文本区的内容,这样就实现了新建
5:针对于另存为,弹出文件选择对话框,然后通过输出流到文件上,如果保存失败,就弹出提示,然后回到上一界面,如果可以保存就保存在文件里即可。
五、实验结果
1:首先是设计出来的记事本界面,包括基本功能以及带有滚动条的文本区域。
并且可以在记事本中输入内容,超出超出限定长度后可以出现滚动条。
2:记事本中先有一个文档
如果想要新建一个文档就点击“新建”按钮
接下来会弹出一个窗口选择是否需要保存
如果点击“是”,就会出现选择窗体,让你选择保存位置以及文档的名字
这样就保存好了,并且新建了一个文档
3:点击打开按钮,就会弹出选择打开文件窗体,找到并选择你想要打开的文件,点击即可。
这样文本内容就可以显示出来了。
4:保存,如果保存的是新建的文本,会弹出选择保存位置的窗口,然后点击“保存”,会直接进行保存
5:另存为的结果和保存相似都是保存文档,只是将文档另外保存,即使这个文档时打开的文档,也保存为另外一种文档或者说换个文件夹保存,直接就是弹出一个窗口选择选择位置,进行保存就行。
六、讨论与分析
对于记事本的界面设计,有一些新的功能按钮,比如菜单呀,下拉菜单,滚动功能,设计好界面以后,只需要每个按钮设置事件,不同的事件使用不同的对文件流的功能,但是具体的设置中出现了一些问题,查资料问同学改了很久才改出想要的结果,当时有些功能依然无法完善,还有些细节问题没有彻底弄明白。这教会我,Java真的很烦躁,需要很多耐心,很多细心,很多坚持不懈。
七、附录:关键代码(给出适当注释,可读性高)
package test;
import java.awt.EventQueue;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import java.awt.FlowLayout;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JList;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Ji {
private JFrame frmNotepad;
int i = 2;
String name;
JTextArea text ;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Ji window = new Ji();
window.frmNotepad.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Ji() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frmNotepad = new JFrame();
frmNotepad.setTitle("无标题文本1");
frmNotepad.setBounds(100, 100, 555, 361);
frmNotepad.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmNotepad.getContentPane().setLayout(new BorderLayout(0, 0));
JScrollPane scrollPane = new JScrollPane();
frmNotepad.getContentPane().add(scrollPane, BorderLayout.CENTER);
text = new JTextArea();
scrollPane.setViewportView(text);
JMenuBar menuBar = new JMenuBar();
frmNotepad.setJMenuBar(menuBar);
JMenu mnf = new JMenu("文件");
menuBar.add(mnf);
JMenuItem mnfile_New = new JMenuItem("新建");//新建空白文档
mnfile_New.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String str = text.getText();
if(!"".equals(str)) {
int ret=JOptionPane.showOptionDialog(null,"已经打开的文件尚未保存,需要保存吗?","提示",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE,null,null,null);
if(ret == JOptionPane.YES_OPTION) {
/**
* save this file
*/
asSave();
/**
* Empty documents
*/
frmNotepad.setTitle("无标题文档"+i);
text.setText("");
i = i+1;
}
}
else {
frmNotepad.setTitle("无标题文档"+i);
i = i+1;
}
}
});
mnf.add(mnfile_New);
JMenuItem mnfile_Open = new JMenuItem("打开");
mnfile_Open.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
open();
}
});
mnf.add(mnfile_Open);
JMenuItem mntms = new JMenuItem("保存");
mntms.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
mnf.add(mntms);
JMenuItem mntma = new JMenuItem("另存为");
mntma.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
asSave();
}
});
mnf.add(mntma);
JMenu mne = new JMenu("编辑");
menuBar.add(mne);
JMenu mno = new JMenu("格式");
menuBar.add(mno);
JMenu mnv = new JMenu("查看");
menuBar.add(mnv);
JMenu mnh = new JMenu("帮助");
menuBar.add(mnh);
}
private void open() {
JFileChooser jfc = new JFileChooser();
int ret = jfc.showOpenDialog(frmNotepad);//显示打开文件选择窗体
if(ret == jfc.APPROVE_OPTION) {
File curFile = jfc.getSelectedFile();//得到选择的文件
String name = curFile.getName();
FileReader fr;
try {
fr = new FileReader(curFile);
BufferedReader br = new BufferedReader(fr);
String s = br.readLine();
while(s!=null) {
text.append(s+"\n");
s = br.readLine();
}
frmNotepad.setTitle(name);
br.close();
fr.close();
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
ret =JOptionPane.showOptionDialog(null,"找不到该文件","提示",JOptionPane.CLOSED_OPTION,JOptionPane.WARNING_MESSAGE,null,null,null);
} catch (IOException e1) {
// TODO Auto-generated catch block
ret =JOptionPane.showOptionDialog(null,"无法打开该文件","提示",JOptionPane.CLOSED_OPTION,JOptionPane.WARNING_MESSAGE,null,null,null);
}
}
}
private void asSave() {//保存文档
JFileChooser chooser = new JFileChooser();
int option = chooser.showSaveDialog(null); //弹出是否保存的窗口
if(option==JFileChooser.APPROVE_OPTION){
File file = chooser.getSelectedFile();
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(text.getText().getBytes());
fos.close();
} catch (IOException e1) {
option =JOptionPane.showOptionDialog(null,"无法保存该文件","提示",JOptionPane.CLOSED_OPTION,JOptionPane.WARNING_MESSAGE,null,null,null);
e1.printStackTrace();
}
}
}
}
更多推荐
所有评论(0)