以下程序是一个简单文本处理器,菜单项可以打开、编辑、保存一个文件。文件内容显示在下面的文本区域中(提示,打开文件通过文件选择器来完成)。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。运行结果如下图所示。

admin2009-01-15  39

问题 以下程序是一个简单文本处理器,菜单项可以打开、编辑、保存一个文件。文件内容显示在下面的文本区域中(提示,打开文件通过文件选择器来完成)。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。运行结果如下图所示。
                                          
   注意:不改动程序的结构,不得增行或删行。
   import java.awt.*;
   import java.awt.event.*;
   import java.io.* ;
   import javax.swing.*;
   class FileFrame extends JFrame
   {
   File file;
   JTextPane textpane;
   FileInputStream readStream;
   JScrollPane scroll;
   public FileFrame()
   {
       super ("文件浏览");
       JMenu fileM = new JMenu("文件");
       OpenAction open = new OpenAction ();
       SaveAction clear = new SaveAction  ();
       ExitAction exit = new ExitAction();
       JMenuBar mb = new JMenuBar();
       fileM.add(open);
       fileM.add(clear);
       fileM.add(exit);
       mb.add(fileM);
       textpane=new JTextPane();
           scroll=new JScrollPane(textpane);
           getContentPane().add(scroll);
           getContentPane().addJMenuBar(mb);
   }
   class OpenAction extends AbstractAction
   {
           public OpenAction ()
           {
               super("打开");
           }
           public void actionPerformed( ActionEvent e )
           {
               JFileChooser chooser=new JFileChooser();
               int state=chooser.showOpenDialog(null);
               file=chooser.selectedFile();
               if(file!=null&&state==JFileChooser.APPROVE_OPTION)
               {
                   try
               {
                   readStream=new FileInputStream(file);
                       textpane.read(readStream, this);
                       readStream.close();
                   }
                   catch(IOException ioE){}
                   }
           }
   }
   class SaveAction extends AbstractAction
   {
       public SaveAction()
           {
               super("保存");
           }
           public void actionPerformed( ActionEvent e )
           {
               if(file==null)
                   return;
               try{
                   FileWriter out = new FileWriter(file);
                   out.read(textpane.getText());
                   out.close();
               }
           catch (IOException ioE)
               {}
           }
   }
   class ExitAction extends AbstractAction
   {
       public ExitAction()
           {
               super("退出");
           }
           public void actionPerformed( ActionEvent e )
           {
               System.exit(0);
           }
    }
   public static void main(String argv[])
   {
       FileFrame f = new FileFrame();
       f.setDefaultCloseOperation(JFrame. EXIT ON CLOSE);
       f.setSize(300,400);
       f.show();
   }
   }

选项

答案①setJMenuBar(mb) ②file=chooser.getSelectedFile() ③out.write(textpane.getText())

解析 构造方法FileFrame()中初始化了程序界面,菜单“fileM”中添加了3个菜单项“打开”、“保存”和“退出”,并为这3个菜单项添加了相应的事件。“textpane”是一个文本编辑面板,其上可以显示和修改文本。openAction类定义了用户选择“打开”菜单的事件。用户选择“打开”,程序向用户显示文件选择器“chooser”,使用户通过图形化的方式选择文件。根据用户选择的结果,生成File类的实例“file”。语句“textpane.read(readStream,this)”读取文件内容并显示在“textpane”中。 SaveAction定义了用户选择“保存”菜单的事件。在SaveAction类中,程序调用FileWriter的写文件方法将“textpane”中的内容输出到文件中。
玻璃面板(glassPane)、内容面板(contentPane)、菜单条(JMenuBar)共同组成根面板。getContentPane()获得的是顶层容器的内容面板而不是根面板,所以不能在其中添加菜单条。因此第 1 条下划线处应该改为 setJMenuBar(mb),将“mb”设置为根面板的菜单条。
第2处和第3处改错,主要考查对文件选择和文件输出的基本操作的掌握情况。这些常用的类和常用的方法只有在多次练习之后才能熟练掌握。
转载请注明原文地址:https://kaotiyun.com/show/JLnp777K
0

最新回复(0)