Сохранение JTextArea как текстового файла - конечная переменная - PullRequest
0 голосов
/ 28 апреля 2011

Мне нужно сохранить то, что пользователь вводит в JTextArea, в виде txt-файла, когда они нажимают кнопку сохранения, но я продолжаю получать сообщение об ошибке, когда пытаюсь скомпилировать его, надеюсь, кто-то может помочь.Вот мой код:

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

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.Color;
import java.awt.Font;
import java.awt.Image;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.*;

class InputRoute extends JFrame
{   
InputRoute()
{
    Container c = getContentPane();
    c.setLayout ( null );

    Color b = new Color(100,200,255); // set colour of JFrame
    c.setBackground( b );

    JLabel title = new JLabel("Input Route"); // new label
    title.setBounds(250, 20, 500, 30); // set position and size
    title.setForeground(Color.BLUE); // set colour of text to blue
    title.setFont(new Font("Time", Font.BOLD, 18)); // change font and size of text
    c.add(title);//adds object

    JLabel todo = new JLabel("Please enter your route below:"); // new label
    todo.setBounds(200, 40, 500, 30); // set position and size
    todo.setForeground(Color.BLUE); // set colour of text to blue
    todo.setFont(new Font("Time", Font.BOLD, 12)); // change font and size of text
    c.add(todo);//adds object

    JLabel eastmid = new JLabel("East Midlands Bus");//creates label
    eastmid.setBounds(245,400,500,30);//label location and size
    eastmid.setForeground(Color.BLUE);//colour of text
    eastmid.setFont(new Font("Time", Font.BOLD, 12));//font of text
    c.add(eastmid);//adds object

    JTextArea inputroute=new JTextArea("");//creates text field to enter route
    inputroute.setBounds(50, 75, 500, 250);//sets location and size
    inputroute.setEditable(true);//makes the field editable
    inputroute.setFont(new Font("Time", Font.PLAIN,12));//sets font of text
    inputroute.setBackground(null);//makes background transparents
    inputroute.setForeground(Color.BLUE);//sets colour of text
    inputroute.setBorder(BorderFactory.createEtchedBorder(3, Color.BLUE, Color.BLUE)); //sets border so text field can be seen

    JScrollPane scrollPane = new JScrollPane(inputroute);
    scrollPane.setBounds(50,75,500,250);

    JButton save = new JButton("SAVE ROUTE");//creates buttons
    save.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            String fileName = JOptionPane.showInputDialog("Enter file name");//String finalFileName = fileName.getText();
            FileWriter outFile = new FileWriter(fileName +".txt",true);
            outFile.write(inputroute.getText());
            outFile.close();
        }
    });

    JButton exit = new JButton("EXIT");
    exit.addActionListener(new ActionListener() 
    {
        public void actionPerformed(ActionEvent e)
        {
            dispose();
        }
    });

    exit.setForeground(Color.BLUE);//edits button
    exit.setFont(new Font("Time", Font.BOLD, 12));
    save.setForeground(Color.BLUE);//edits button
    save.setFont(new Font("Time", Font.BOLD, 12));

    c.add(exit);//adds objects
    c.add(save);
    c.add(scrollPane);

    exit.setBounds(250, 375, 90, 30);//sets location of button
    save.setBounds(230,340, 150,30);

    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    this.setBounds((int) screenSize.getWidth()/2 - 370, (int) screenSize.getHeight()/2 - 300, 600, 450);  // set position and size
    this.setResizable(false);
    this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

    this.setTitle("Admin");
    this.setVisible(true);
    this.setResizable(false);
}
 }

Это ошибка, которую я получаю:

локальная переменная inputroute доступна из внутреннего класса;нужно объявить final outFile.write (inputroute.getText ());

, и я посмотрел на Google, как это сделать, но мне не повезло.

Ответы [ 4 ]

1 голос
/ 28 апреля 2011

Также используйте метод textArea.write (...) для сохранения данных. Ваш текущий код неверен и не будет работать должным образом в Windows. Метод textArea.getText () вернет строку текста, которая использует «\ n» для представления новой строки. В окне новая строка строки "\ r \ n". Метод write (...) для текстовой области справится с этим.

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

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

0 голосов
/ 28 апреля 2011

перед строкой: save.addActionListener(new ActionListener()

Место:

final JTextArea myInputroute = inputroute

и используйте myInputroute внутри класса.

0 голосов
/ 28 апреля 2011

Вы пытаетесь получить доступ к неконечной переменной, объявленной local в конструкторе, из внутреннего класса. Попробуйте сделать inputRoute поле вашего класса вместо переменной внутри конструктора.

...