【问题标题】:Refresh JTextArea in method在方法中刷新 JTextArea
【发布时间】:2019-04-17 18:05:42
【问题描述】:

我有以下问题: 在我的 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

【问题讨论】:

  • 别忘了close你的扫描仪。
  • 为什么要创建一个只有一个字符宽的文本区域?为什么扔掉它并在try-block中重新创建一个文本区域?为什么将文本区域放在滚动窗格中,然后将文本区域重新设置为内容窗格的子级,然后对滚动窗格不做任何事情?

标签: java swing


【解决方案1】:

使用revalidate()repaint()

【讨论】:

  • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
  • 承认,以后我会努力变得更好
【解决方案2】:

这是一个 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();
    }
}

【讨论】:

  • 尝试,但不能在现场工作。同样的问题,文件是在程序运行时生成的
  • 因此需要创建一个监听器。什么版本的Java?这肯定会有所作为。
  • 我最好做一个带有刷新功能的按钮
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多