我有一个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:在进行更多测试之后,问题不在于文本区域未被更新,而是仅在该过程完成后重新绘制。我尝试过重绘(),但这并没有任何区别。
谢谢, 加里