附加文本未在JTextArea中显示

时间:2017-10-12 18:50:13

标签: java swing

我有一个Swing应用程序,我试图在对话框中显示信息性消息。我创建了一个包含两个组件的对话框,一个是JScrollPane和一个JTextArea。我在主框架中创建对象并将其传递给将文本附加到JTextArea的类。初始的setText文本显示但是当我调用append方法时,没有显示任何行。

这是MessageDialog类......

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

public class MessagesDialog extends JDialog {
    private JScrollPane textScrollPane;
    private JTextArea messageArea;

    public MessagesDialog(JFrame parent) {
        super(parent, "Message Display", false);

        setPreferredSize(new Dimension(450, 250));

        messageArea = new JTextArea();
        messageArea.setText("This is a test\n");
        messageArea.setRows(100);
        messageArea.setEditable(false);

        textScrollPane = new JScrollPane(messageArea);
        textScrollPane.setPreferredSize(new Dimension(400, 200));

        layoutComponents();
    }

    private void layoutComponents() {
        setLayout( new GridBagLayout());

        GridBagConstraints gc = new GridBagConstraints();

        // First Row
        gc.gridy = 0;
        gc.gridheight = 1;

        gc.weightx = 1;
        gc.weighty = 0.05;

        gc.gridx = 0;
        gc.anchor = GridBagConstraints.CENTER;
        gc.insets = new Insets(0,0,0,0);
        add(textScrollPane, gc);

        pack();
    }

    public void appendMessage(String textLine) {
        this.messageArea.append(textLine + "\n");

        System.out.println("MESSAGE AREA = " + this.messageArea.getText());

        pack();
    }
}

文字"这是一个测试"显示在窗口中。调用appendMessage方法时,不会显示任何内容,但控制台会显示所有正确的行。

这些是创建对象的代码行......

messagesDialog = new MessagesDialog(this);
messagesDialog.setVisible(true);

processZipFile = new ProcessZipFile(messagesDialog);

processZipFile对象是调用messageAppend ...

的对象
messagesDialog.appendMessage(String.format("Extracting file %s to %s\n", file, logOutputPath));

为什么附加的行没有显示在JTextArea中?

更新:我将初始setRows更改为100并删除了messageAppend方法中的那个。当我删除滚动窗格的setPreferredSize时,滚动窗格不再显示。我改为从文本中删除了相同的内容并保留了滚动窗格中的内容,并恢复了滚动窗格。

更新#2:在进行更多测试之后,问题不在于文本区域未被更新,而是仅在该过程完成后重新绘制。我尝试过重绘(),但这并没有任何区别。

谢谢, 加里

0 个答案:

没有答案