以下程序是一个简单文本处理器,菜单项可以打开、编辑、保存一个文件。文件内容显示在下面的文本区域中(提示,打开文件通过文件选择器来完成)。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。运行结果如下图所示。
注意:不改动程序的结构,不得增行或删行。 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处改错,主要考查对文件选择和文件输出的基本操作的掌握情况。这些常用的类和常用的方法只有在多次练习之后才能熟练掌握。