在GUI中刷新文本面板的显示
我有更多“我无法编程”的问题。在GUI中刷新文本面板的显示
我有一段代码,它使用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还有一个文本输入面板,可以输入十六进制值的字符串。
单击一个按钮时,会提示用户输入另一个值,该值与阵列中应插入第一个十六进制值的位置相对应。
一旦输入了这些值,我想要更新/刷新显示以反映这一点,但我不确定如何去做。
我发现这里这个问题,这是类似的,但我不知道,如果实施观察者/可观察模式是正确的前进方式,即使是这样,我怎么会去一下吧: Best Way to Constantly Update GUI Elements
我最初的方法是增加一个“updateDisplay()”方法,我可以处理按钮点击之后,调用和重新调用makeTextPanel方法:
public void updateDisplay() {
makeTextPanel(text);
}
我想这可能刷新它,但它没有显示效果。
任何帮助表示赞赏。
您将数组放在模型类中,并允许其他类通过为此类提供SwingPropertyChangeSupport对象以及addPropertyChangeListener(...)方法来“侦听”此类。然后给数组一个setXXX(...)方法,并在该方法更新数组后触发SwingPropertyChangeSupport对象。这个网站上只有这样的例子,有些是我写的。
顺便说一句,我并不感到惊讶,你对makeTextPanel(text)
不能正常工作。它会创建一个JPanel,但是您不会对从该方法返回的JPanel执行任何操作。但你也不应该。我不认为创建新的JPanel是您想要的解决方案,而是使用上面描述的侦听器框架更新由某种组件(如JList或JTextArea)显示的字符串。
如果有任何疑惑,请要求澄清。
谢谢。我会去实施它。 我在这很没用,所以我可能需要很长时间,但仍然会弄得一团糟,但我会让你知道的。 :-) – Robert 2012-07-09 21:44:55
谢谢。它确实花了我很多时间,我确实弄得一团糟,但最终我到了那里。 – Robert 2012-08-07 13:57:59