Сохранить текст JTextArea в текстовый файл - PullRequest
4 голосов
/ 02 апреля 2012

У меня проблемы с сохранением текста из JTextArea в текстовый файл. Когда я сохраняю данные, в моем текстовом файле ничего нет. Я чувствую, что пишу на выходе неправильно. Есть ли лучший способ закодировать это? Спасибо за помощь!

Класс для программы

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;

public class SaveClass extends JPanel
{
    JPanel cards;
    private JPanel card1;
    private JTextArea textarea1;
    private JFileChooser fc;

    public SaveClass()
    {
        Font mono = new Font("Monospaced", Font.PLAIN, 12);

        textarea1 = new JTextArea();
        textarea1.setFont(mono);



        card1 = new JPanel();
        card1.add(textarea1);



        cards = new JPanel(new CardLayout());
        cards.add(card1, "1");

        add(cards, BorderLayout.CENTER);



        setBorder(BorderFactory.createTitledBorder("Text here"));
        setFont(mono);
    }

    public String getText1()
    {
        return this.textarea1.getText();
    }

    public void Save()
    {
        SaveClass sa = new SaveClass();
        String text = sa.getText1();

        JFileChooser chooser = new JFileChooser();
        chooser.setCurrentDirectory( new File( "./") );
        int actionDialog = chooser.showSaveDialog(this);
        if (actionDialog == JFileChooser.APPROVE_OPTION)
        {
            File fileName = new File(chooser.getSelectedFile( ) + "" );
            if(fileName == null)
                return;
            if(fileName.exists())
            {
                actionDialog = JOptionPane.showConfirmDialog(this,
                                   "Replace existing file?");
                if (actionDialog == JOptionPane.NO_OPTION)
                    return;
            }
            try
            {
                BufferedWriter out = new BufferedWriter(new FileWriter(fileName));

                    out.write(text);
                    out.close();
            }
            catch(Exception e)
            {
                 System.err.println("Error: " + e.getMessage());
            }
        }

    }
}

Основная программа

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class SaveMain extends JFrame
{

    private SaveClass canvas;

    private JPanel buttonPanel;
    private JButton btnOne;


    public SaveMain()
    {
        super("Save JTextArea text to a txt file");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setLayout(new BorderLayout());

        canvas = new SaveClass();

        buildButtonPanel();

        add(buttonPanel, BorderLayout.SOUTH);
        add(canvas, BorderLayout.CENTER);

        pack();
        setSize(800, 800);
        setVisible(true);

    }
    private void buildButtonPanel()
    {
        buttonPanel = new JPanel();

        btnOne = new JButton("Save");

        buttonPanel.add(btnOne);


        btnOne.addActionListener(new btnOneListener());


    }
    private class btnOneListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            if (e.getSource() == btnOne)
            {
                canvas.Save();
            }
        }
    }


    public static void main(String[] args)
    {
        new SaveMain();
    }

}

Ответы [ 4 ]

5 голосов
/ 23 декабря 2012
        FileWriter pw = new FileWriter ("filename.txt");
        txtarea.write(pw); //Object of JTextArea

Вам нужно всего два оператора, чтобы записать содержимое JTextArea в файл ...

Надеюсь, это поможет вам ...

5 голосов
/ 02 апреля 2012

Мне кажется, проблема в том, что вы создаете экземпляр класса SaveClass в классе Main, но в методе Save, то есть в классе SaveClass, вы создаете другой экземпляр и читаете текст из этого экземпляра. Поэтому вы можете сделать это с помощью метода Save ():

delete the SaveClass sa = new SaveClass(); 

и затем:

String text = this.getText1();
3 голосов
/ 02 апреля 2012

Мне кажется, что вы никогда не добавляете свою JTextArea в JFrame.В частности, вы добавляете JTextArea с именем textarea1 к JPanel с именем card1, но этот JPanel никогда не добавляется в JFrame.

РЕДАКТИРОВАТЬ: О, я вижу, что вы добавляете SaveClass, которыйJPanel к кадру (хотя существует много, много JPanel, которые, по-видимому, не имеют ничего в этом SaveClass).Однако когда вы вызываете метод Save(), вы создаете новый класс SaveClass.В этом новом SaveClass JTextArea инициализируется без чего-либо, чтобы ничего не записывалось в файл.

0 голосов
/ 02 апреля 2012

Возможно, вам нужен out.flush () непосредственно перед out.close ().

...