1

我在 SO 上查看过类似的线程,但无论我做什么,jTextArea都不会更新。

如果我尝试类似:

for (int i = 0; i < a.getB().getC().size(); i++) {
        jTextArea1.append(a.getB().getC(i).toString()); 
        jTextArea1.update(jTextArea1.getGraphics());
    } 

我看到有人getGraphics用来解决这个问题,但在我的情况下它不起作用。

如何确保jTextArea已更新?

在尝试将其附加到 textarea 之前,我已确保字符串中有一个值,因为我将其打印到控制台。

4

4 回答 4

3

好吧,你绝对不应该用 textarea 的图形来调用 update。检查此项以了解更新/获取图形。

检查这个以获得解决方案:JTextArea 的 append () 方法似乎不起作用

如果它没有帮助,请尝试调试,也许您正在附加一个空字符串或类似的东西。

于 2013-09-18T13:24:40.547 回答
2

Swing 组件应在EDT 中更新。

for (int i = 0; i < a.getB().getC().size(); i++) {

final int value = i;

SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {

        jTextArea1.append(a.getB().getC(value).toString()); 
    }
});
}
于 2013-09-18T13:26:57.493 回答
1

显然问题是我创建了 2 个 GUI 实例,其中一个不可见,所以它总是存在于我可以看到的 GUI 后面,从而隐藏了真正的问题。

当我发现问题很容易解决时。在我创建其他 gui 的 parentGUI 中,我现在为这些新 GUI 提供了 parentGUI 的实例。看:

private void dropdownActionPerformed(java.awt.event.ActionEvent evt) {                                             
    if (dropdown.getSelectedIndex() == 1) {
        NewFrame newFrame = new NewFrame(this); //the keyword this did the trick
        newFrame.setVisible(true);
    }
}

然后在 NewFrame 的构造函数中,我捕获了 parentGUI 的实例:

public class NewFrame extends javax.swing.JFrame {

private GUI parentgui;

public NewFrame(GUI parentGUI) {
    initComponents();   
    parentgui = parentGUI;
}

现在我们的问题解决了 :) 我只有一个 parentGUI 实例,并且 jTextArea 被完美填充。

于 2013-09-20T11:41:36.697 回答
1

jTextArea.append应该管用。也许 Swing Thread 中的某些 GUI 操作阻止了对文本区域的更新?

于 2013-09-18T14:57:38.917 回答