Попытка получить BufferedWriter для сохранения текстовой области в текстовый файл - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь создать приложение календаря и использовать раздел заметок, помеченный как заметки. У меня есть кнопка добавления, чтобы добавить новую заметку, и я хочу, чтобы она добавлялась к текущему файлу в пути. Я пытаюсь использовать BufferWriter для этого. Я приложил метод newNote (), который открывает новый фрейм и учитывает новый текст. Я думаю, что пытаюсь добавить новый текст в текущий файл, но примеры, которые я видел, показывают, как это сделать. Вывод TXT-файла не то, что я ожидал. Я думаю, что это связано с вызовом объекта textArea, и он извлекает данные объекта, а не входные данные внутри textArea. Я немного новичок в Java и делаю этот проект для личного пользования, а не для класса. Любая помощь и понимание будут оценены. Это также моя первая публикация на форуме, поэтому, пожалуйста, дайте мне знать, если есть лучший способ сделать это.

Метод newNote ().

public static void newNote() {//opens new frame to create a new note
    //variables for the new window
    JFrame noteFrame = new JFrame("New Note");
    JPanel notePanel = new JPanel();
    JButton cancelButton = new JButton("Cancel");
    JButton addButton = new JButton("Add");
    JTextArea textArea = new JTextArea("Add notes here");
    //creates and positions buttons
    addButton.setBounds(150,330,65,40);
    addButton.addActionListener(new ActionListener() {//writes contents to a txt file when Add is clicked
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            BufferedWriter writer = null;
            try {
                writer = new BufferedWriter((new FileWriter("/home/skydawg/pCloudDrive/Documents/test/Log.txt", true)));

                writer.write(String.valueOf(textArea));
                writer.newLine();
                writer.flush();
            } catch (IOException ioe) {
                ioe.printStackTrace();
            } finally {
                if (writer != null) try {
                    writer.close();
                } catch (IOException ioe2) {
                    // just ignore it
                }
                noteFrame.dispose();//closes the frame
            }}
    });

Вывод на текстовый файл

newjavax.swing.JTextArea[,10,10,280x295,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.synth.SynthBorder@13e59af,flags=296,maximumSize=,minimumSize=,preferredSize=,caretColor=javax.swing.plaf.ColorUIResource[r=0,g=0,b=0],disabledTextColor=javax.swing.plaf.ColorUIResource[r=218,g=218,b=218],editable=true,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=javax.swing.plaf.ColorUIResource[r=255,g=255,b=255],selectionColor=javax.swing.plaf.ColorUIResource[r=134,g=108,b=186],colums=0,columWidth=0,rows=0,rowHeight=0,word=true,wrap=true]

Ответы [ 2 ]

3 голосов
/ 10 января 2020

JTextArea расширяется JTextComponent. Итак, у вас есть метод с именем write(java.io.Writer writer).

Это означает, что вы можете позвонить textArea.write(writer) в своем коде.

3 голосов
/ 10 января 2020

Здесь:

writer.write(String.valueOf(textArea));

javado c для этого метод :

Возвращает строковое представление аргумента Object.

Это не то, что вы ожидаете. Это похоже на вызов textArea.toString() ... что опять-таки: не дает вам строку content вашего textArea.

Вместо этого вы хотите вызвать textArea.getText() и написать это к вашему файлу.

Помимо этого: вы не должны бросать так много вещей вместе. Значение: написать служебный класс, который просто записывает некоторый текст в файл. Проверьте это отдельно. И только когда эта часть сработает, вы положите GUI вокруг этого. Ваш подход: собрать все вместе, протестировать все одновременно. Это означает, что вы бежите от одной проблемы к другой. Не делай этого. Разделите вашу проблему на множество мелких частей и подумайте: «Как я могу решить и проверить каждую часть изолированно?»

Наконец, как вы только что видели: GUI программирование и GUI компоненты сложные . Попытка изучить этим методом проб и ошибок - действительно неэффективная стратегия! действительно лучше читать хорошую книгу или учебник (см., Например, ) . Начните с рабочих примеров, вместо того, чтобы собирать вместе 5 разных вещей, которые для вас новы! И самое главное: каждый раз, когда вы используете новый класс, который вы не изучали ранее: найдите время, чтобы прочитать соответствующий javado c. Сверху вниз! Вы можете инвестировать это время заранее или потратить 1 час, не понимая, что происходит, а затем инвестировать это время.

...