Обновить JTextArea в методе - PullRequest
       1

Обновить JTextArea в методе

0 голосов
/ 17 апреля 2019

У меня следующая проблема: в моей JTextArea я вставил строку по умолчанию, которая должна быть обновлена ​​с новой формулировкой после загрузки файла. У меня проблема в том, что живое обновление JTextArea не выполнено, но если я выйду из системы и войду в систему, я увижу измененную строку.

    public void createWindow()
    {
          // some code...

          JTextArea textArea = new JTextArea(1,1);
          String all = "Nothing Infractions";
      try {
        all = new Scanner (file).useDelimiter("\\A").next();
        textArea =new JTextArea(100,1);
      } catch (FileNotFoundException e1) {
        textArea =new JTextArea(1,1);
      } 
    JScrollPane scroll = new 
JScrollPane(textArea,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    textArea.setText(all);
    frmUser.getContentPane().add(textArea);

Обновление:

считалось, что текстовая область была написана без нарушения, затем программа проходила случайным образом и назначала ее каждому пользователю, проблема и то, что при назначении их всем зарегистрированному пользователю автоматически не обновляется та часть текста, где нарушение не было написано.

Я использую Java 8

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Используйте revalidate() и repaint().

0 голосов
/ 18 апреля 2019

Вот MCVE (минимальный, полный и проверяемый пример, см. https://stackoverflow.com/help/mcve), из которого вы вырезали и вставляли по мере необходимости для вашего вопроса. Приведенный ниже пример принципиально не отличается от вашего вопроса, но позволяет другим пользователям в StackOverflow, чтобы воспроизвести проблему и передать предложения или решения.

Помимо изменения вопроса, укажите, какую версию Java вы используете.

Исходя из того, что вы сказали, вам, вероятно, потребуется внедрить некоторый тип слушателя, чтобы определить, когда изменяется содержимое файла - или оно создается и никогда не изменяется?

190418 1646Z: добавлена ​​кнопка обновления для вашего последнего комментария. Дайте мне знать, если вы предпочитаете, чтобы окно обновлялось без нажатия кнопки.

package javaapplication7;

import java.awt.Color;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class FileWatcher extends JFrame {

    static final File WATCH_FILE = new File("c:\\temp\\java7.txt");
    static final String DELIMITER = "\n";
    private JPanel panel = new JPanel();
    private JTextArea textArea = new JTextArea(20, 20);

    public FileWatcher() {

        JFrame frame = new JFrame();
        frame.setSize(600, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.setTitle("File Watcher");

        frame.add(createPanel());
        frame.pack();
    }

    private JPanel createPanel() {
        // some code...

        JPanel tempPanel = getPanel();

        GridBagConstraints gbc = new GridBagConstraints();
        tempPanel.setLayout(new GridBagLayout());

        JButton button = new JButton("Refresh");
        button.addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent e) {
                getUpdatedText();
            }

            @Override
            public void mousePressed(MouseEvent e) {
            }

            @Override
            public void mouseReleased(MouseEvent e) {
            }

            @Override
            public void mouseEntered(MouseEvent e) {
            }

            @Override
            public void mouseExited(MouseEvent e) {
            }

        });
        gbc.anchor = GridBagConstraints.NORTH;
        getPanel().add(button, gbc);

        getTextArea().setFont(new Font("Verdana", Font.BOLD, 16));
        getTextArea().setBorder(BorderFactory.createEtchedBorder());
        getTextArea().setLineWrap(true);
        getTextArea().setWrapStyleWord(true);
        getTextArea().setOpaque(true);
        getTextArea().setVisible(true);
        getUpdatedText();

        JScrollPane scroll = new JScrollPane(getTextArea(), JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        scroll.setBorder(BorderFactory.createLineBorder(Color.blue));
        scroll.setVisible(true);
        //        frmUser.getContentPane().add(textArea);

        gbc.gridy = 1;
        gbc.weightx = 1;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        tempPanel.add(scroll, gbc);

        return tempPanel;
    }

    public void getUpdatedText() {
        String all = new String();
        try (Scanner scanner = new Scanner(WATCH_FILE).useDelimiter(DELIMITER)) {
            while (scanner.hasNext()) {
                all = all.concat(scanner.next()).concat(DELIMITER);
            }
        } catch (FileNotFoundException ex) {
            // swallow, next line covers it
        }

        if (all.isEmpty()) {
            all = "No Infractions";
        }

        getTextArea().setText(all);

    }

    public JPanel getPanel() {
        return panel;
    }

    public void setPanel(JPanel panel) {
        this.panel = panel;
    }

    public JTextArea getTextArea() {
        return textArea;
    }

    public void setTextArea(JTextArea textArea) {
        this.textArea = textArea;
    }

    public static void main(String[] args) {
        FileWatcher javaApplication7 = new FileWatcher();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...