【问题标题】:Java Novice Saving and loading: NotepadJava新手保存和加载:记事本
【发布时间】:2013-07-24 18:44:19
【问题描述】:

感谢您抽出宝贵时间阅读本文,我会开门见山的。我遇到的问题是,由于某种原因,我的练习记事本没有做我想做的事。它可以像你写的那样工作,但问题是我的保存方法只加载而不是保存。它们都加载了,我希望其中一个保存。我不确定我是否在某个地方犯了错误,或者我做错了什么,但这里是代码:

import javax.swing.*;
import javax.swing.event.*;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.Scanner;

public class Notepad extends JFrame {

    ImageIcon im = new ImageIcon("Water.bmp");

    private JFrame f = new JFrame("Notepad"); // Create Frame
    private JPanel pnlNorth = new JPanel(); //North Quadrant
    private JPanel pnlSouth = new JPanel(); //South Quadrant


    private JMenuBar mb = new JMenuBar(); // Menu Bar
    private JMenu mnuFile = new JMenu("File"); // File Entry of Menu Bar
    private JMenuItem mnuItemQuit = new JMenuItem("Quit"); // Quit Sub item

    private JMenuItem mnuItemSave = new JMenuItem("Save");

    private JMenuItem mnuItemOpen = new JMenuItem("Open");

    private JMenu mnuHelp = new JMenu("Help"); //Help Menu Entry
    private JMenuItem mnuItemAbout = new JMenuItem("About"); //About Entry

    private JTextArea Ta = new JTextArea(10, 30);


    int fileSave;
    int fileOpen;
    JFileChooser sFile;
    JFileChooser oFile;


    public Notepad(){



        pnlSouth.add(Ta);

        f.getContentPane().setLayout(new BorderLayout());
        f.getContentPane().add(pnlNorth, BorderLayout.NORTH);
        f.getContentPane().add(pnlSouth,BorderLayout.SOUTH );
        //f.add(button);
f.addWindowListener(new ListenCloseWdw());

f.setJMenuBar(mb);

mnuItemQuit.addActionListener(new ListenMenuQuit());

mnuItemSave.addActionListener(new ListenMenuSave());

mnuItemOpen.addActionListener(new ListenMenuOpen());

//Build Menus
mnuFile.add(mnuItemQuit);//Create Quit Line
mnuFile.add(mnuItemSave);
mnuFile.add(mnuItemOpen);
mnuHelp.add(mnuItemAbout); //Create About Line
mb.add(mnuFile);        // Add Menu Items to form
mb.add(mnuHelp);




    }




    public class ListenCloseWdw extends WindowAdapter{
        public void windowClosing(WindowEvent e){
            System.exit(0);

        }
    }

    public class ListenMenuQuit implements ActionListener{
        public void actionPerformed(ActionEvent e){
            System.exit(0);
        }   
    }

    public class ListenMenuSave implements ActionListener{
        public void actionPerformed(ActionEvent e){
            sFile();

            if (fileSave == JFileChooser.APPROVE_OPTION) {
                Ta.setText("");
                try {
                    Scanner scan = new Scanner(new FileReader(sFile.getSelectedFile().getPath()));
                    while(scan.hasNext())
                        Ta.append(scan.nextLine() + "\n");
                } catch (Exception ex) {
                    System.out.println(ex.getMessage());
                }
            }


        }
    }

    public class ListenMenuOpen implements ActionListener{
        public void actionPerformed(ActionEvent e){
            oFile();
            if (fileOpen == JFileChooser.APPROVE_OPTION) {
                Ta.setText("");
                try {
                    Scanner scan = new Scanner(new FileReader(oFile.getSelectedFile().getPath()));
                    while(scan.hasNext())
                        Ta.append(scan.nextLine() + "\n");
                } catch (Exception ex) {
                    System.out.println(ex.getMessage());
                }
            }

        }
    }

    public void sFile(){
        JFileChooser save = new JFileChooser();// Open up file chooser
        int option = save.showSaveDialog(this);
        fileSave= option;
        sFile = save;
    }

    public void oFile(){
        JFileChooser open = new JFileChooser();// Open up file chooser
        int option = open.showOpenDialog(this);
        fileOpen= option;
        oFile = open;

    }

    public void launchFrame(){
        //Display Frame
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack(); // Adjusting panel to components for Display
        f.setVisible(true);
    }
    public static void main(String args[]){
        Notepad gui = new Notepad();
        gui.launchFrame();
    }
}

【问题讨论】:

    标签: java swing file-io jtextarea notepad


    【解决方案1】:

    您在ListenMenuSave 中使用Scanner ActionListener 用于mnuItemSave JMenuItem,它试图读取保存JFileChooser 中的选定文件。

    改用JTextComponent#writeJTextArea 的内容。

    PrintWriter writer = new PrintWriter(sFile.getSelectedFile());
    ta.write(writer);
    

    记得在 finally 块中调用 writer.close() 以将任何未写入的缓冲数据写入磁盘。

    【讨论】:

    • 很高兴有人知道如何使用 finally 块;)
    【解决方案2】:

    你在两个听众中做几乎完全相同的事情。

    Scanner scan = new Scanner(new FileReader(oFile.getSelectedFile().getPath()));
    while(scan.hasNext())
      Ta.append(scan.nextLine() + "\n");
    

    您扫描给定的文件并将其放入您的文本字段中。这是您想要加载的行为,但为了保存,您将需要读取文本字段中的行并将它们写入新文件。

    【讨论】:

    • 哦,谢谢,我想我现在明白了。我错了,但感谢您的帮助。
    猜你喜欢
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    相关资源
    最近更新 更多