实验五   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(); 

            }

        }

    }

 

}

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐