【问题标题】:Opening, Editing and Saving text in JTextArea to .txt file在 JTextArea 中打开、编辑和保存文本到 .txt 文件
【发布时间】:2014-06-06 07:36:09
【问题描述】:

我在搞乱 java swing 并试图用 JTextArea 打开一个包含现有数据的文本文件。无论我尝试了哪些不同的方法,它似乎都没有保存任何更改。

下面的代码可以很好地读取文本文件,但不写(显然)。

如果有人可以告诉我如何成功保存对 JTextArea 的更改,我将非常感激。

package funwithswing;


import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.util.Scanner;
import javax.swing.border.EmptyBorder;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class AllDataGUI extends JFrame{   

    public AllDataGUI(){
        fileRead();
        panels();         
    }

    private String storeAllString="";
    private JButton saveCloseBtn = new JButton("Save Changes and Close");
    private JButton closeButton = new JButton("Exit Without Saving");
    private JFrame frame=new JFrame("Viewing All Program Details");
    private JTextArea textArea = new JTextArea(storeAllString,0,70);


    private JButton getCloseButton(){
        return closeButton;
     }     

    private void fileRead(){
        try{    
          FileReader read = new FileReader("CompleteData.txt");
          Scanner scan = new Scanner(read);
             while(scan.hasNextLine()){
              String temp=scan.nextLine()+"\n";
              storeAllString=storeAllString+temp;
             }
      }
        catch (Exception exception)
         {
         exception.printStackTrace();
         }
    }      

    private void fileWrite(){
        try{
            FileWriter write = new FileWriter ("CompleteData.txt");
            textArea.write(write);
        }
        catch (Exception e){
            e.printStackTrace();
        }         
    }

    private void panels(){        
         JPanel panel = new JPanel(new GridLayout(1,1));
         panel.setBorder(new EmptyBorder(5, 5, 5, 5));
         JPanel rightPanel = new JPanel(new GridLayout(15,0,10,10));
         rightPanel.setBorder(new EmptyBorder(15, 5, 5, 10));
         JTextArea textArea = new JTextArea(storeAllString,0,70);
          JScrollPane scrollBarForTextArea=new JScrollPane(textArea,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
          panel.add(scrollBarForTextArea); 
          frame.add(panel);
         frame.getContentPane().add(rightPanel,BorderLayout.EAST);
         rightPanel.add(saveCloseBtn);
          rightPanel.add(closeButton);
          closeButton.addActionListener(new ActionListener() {
                  public void actionPerformed(ActionEvent e)
                    {
                        frame.dispose();

                    }
        });
           frame.setSize(1000, 700);
           frame.setVisible(true);   
           frame.setLocationRelativeTo(null);

}

    private void saveBtn(){

  }
}

【问题讨论】:

    标签: java swing file-io jtextarea


    【解决方案1】:

    您需要关闭FileWriter。使用 Java-7 的 try-with-resourcefinally 块正确关闭资源。

    private void fileWrite(){
        FileWriter write=null;
        try{
            write = new FileWriter ("CompleteData.txt");
            textArea.write(write);           
        }
        catch (Exception e){
            e.printStackTrace();
        }
        finally{
          if(write != null) 
           write.close();
        } 
    }
    

    【讨论】:

    • 太棒了。但是我将如何实现 fileWrite() 方法来处理按钮点击?
    • @Splunk 在按钮上使用ActionListener
    • @Splunk,用saveCloseBtn按钮的动作调用这个方法。
    • 不高兴,仍然没有保存。
    【解决方案2】:

    你的代码有一些错误,我已经修改了。编译运行下面的代码就可以解决你的问题了。

    import java.awt.*;
    import javax.swing.*;
    import java.io.*;
    import java.util.Scanner;
    import javax.swing.border.EmptyBorder;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class AllDataGUI extends JFrame{   
    
        public AllDataGUI(){
            fileRead();
            panels();         
        }
    
        private String storeAllString="";
        private JButton saveCloseBtn = new JButton("Save Changes and Close");
        private JButton closeButton = new JButton("Exit Without Saving");
        private JFrame frame=new JFrame("Viewing All Program Details");
       // private JTextArea textArea = new JTextArea(storeAllString,0,70);
        private JTextArea textArea = new JTextArea();
    
    
        private JButton getCloseButton(){
            return closeButton;
         }     
    
        private void fileRead(){
            try{    
              FileReader read = new FileReader("CompleteData.txt");
              Scanner scan = new Scanner(read);
                 while(scan.hasNextLine()){
                  String temp=scan.nextLine()+"\n";
                  storeAllString=storeAllString+temp;
                 }
                 textArea.setText(storeAllString);
          }
            catch (Exception exception)
             {
             exception.printStackTrace();
             }
        }      
    
    
    
        private void panels(){        
             JPanel panel = new JPanel(new GridLayout(1,1));
             panel.setBorder(new EmptyBorder(5, 5, 5, 5));
             JPanel rightPanel = new JPanel(new GridLayout(15,0,10,10));
             rightPanel.setBorder(new EmptyBorder(15, 5, 5, 10));
            // JTextArea textArea = new JTextArea(storeAllString,0,70);
              JScrollPane scrollBarForTextArea=new JScrollPane(textArea,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
              panel.add(scrollBarForTextArea); 
              frame.add(panel);
             frame.getContentPane().add(rightPanel,BorderLayout.EAST);
             rightPanel.add(saveCloseBtn);
              rightPanel.add(closeButton);
              closeButton.addActionListener(new ActionListener() {
                      public void actionPerformed(ActionEvent e)
                        {
                            frame.dispose();
    
                        }
            });
              saveCloseBtn.addActionListener(new ActionListener() {
    
                public void actionPerformed(ActionEvent e) {
                    saveBtn();
                    frame.dispose();
    
                }
            });
               frame.setSize(1000, 700);
               frame.setVisible(true);   
               frame.setLocationRelativeTo(null);
    
    }
    
        private void saveBtn(){
            File file = null;
            FileWriter out=null;
    
    
            try {
                file = new File("CompleteData.txt");
                out = new FileWriter(file);     
                out.write(textArea.getText());
                out.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
      }
        public static void main(String[] arg)
        {
            new AllDataGUI();
        }
    }
    

    【讨论】:

    • 谢谢阿里吉特。如何添加一个弹出框来表示该项目已成功关闭?
    • JOptionPane.showMessageDialog(this, "Saved");在正确的地方使用此代码。
    • 谢谢。你帮了我很多。
    猜你喜欢
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多