刷新GUI中文本面板的显示

时间:2012-07-09 16:49:32

标签: java user-interface refresh stringbuilder

我有更多“我无法编程”问题。

我有一段代码,它使用StringBuilder在程序启动时在GUI的文本面板中显示数组的元素。这是StringBuilder代码:

// memory tab
    StringBuilder mList = new StringBuilder();
    memLocList = new Memory[MEM_LOCATIONS];
    mem = new Memory();
    for (int i = 0; i < memLocList.length; i++) {
        memLocList[i] = mem;
        memLocList[i].setOpCode(00);
        mList.append(String.format("%10s %04x %10s %6s", "Address:   ", i,
                "Value:  ", memLocList[i].getOpCode()));
        mList.append("\n");
    }

JComponent memTab = makeTextPanel(mList.toString());
    tabs.addTab("Memory", new JScrollPane(memTab));

}

protected JComponent makeTextPanel(String t) {
    text = t;
    JPanel panel = new JPanel(false);
    JTextPane filler = new JTextPane();
    filler.setFont(new Font("Courier", Font.PLAIN, 14));
    filler.setText(text);
    filler.setAlignmentX(LEFT_ALIGNMENT);
    panel.setLayout(new GridLayout(1, 1));
    panel.add(filler);
    return panel;
}

GUI还有一个文本输入面板,可以输入一串十六进制值。

单击按钮时,系统会提示用户输入另一个值,该值对应于应插入第一个十六进制值的数组中的位置。

输入这些值后,我希望更新/刷新显示以反映这一点,但我不确定如何进行此操作。

我在这里找到了这个问题,这是类似的但是我不确定实现Observer / Observable模式是否是正确的继续进行方式,即使它是,我将如何去做: Best Way to Constantly Update GUI Elements

我最初的方法是添加一个“updateDisplay()”方法,我可以在处理按钮点击后调用它并重新调用makeTextPanel方法:

public void updateDisplay() {

    makeTextPanel(text);
}

我认为这可能会刷新它,但它不会影响显示效果。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:1)

您将数组保存在模型类中,并允许其他类通过为此类提供SwingPropertyChangeSupport对象以及addPropertyChangeListener(...)方法来“监听”此类。然后给数组一个setXXX(...)方法,并在该方法更新数组后触发SwingPropertyChangeSupport对象。在这个网站上有一些这样的例子,有些是我写的。

例如:hereherehere,...

顺便说一句,我对你makeTextPanel(text)的电话不起作用并不感到惊讶。它创建了一个JPanel,但您似乎没有对从该方法返回的JPanel执行任何操作。但你也不应该。我不认为创建新的JPanels是你想要的解决方案,而是使用我上面描述的监听器框架更新某种组件(如JList或JTextArea)显示的字符串。

如果其中任何一个令人困惑,请要求澄清。