Java 刷新GUI中文本面板的显示
我有更多的“我对编程毫无希望”的问题 我有一段代码,它使用StringBuilder在程序启动时在GUI的文本面板中显示数组元素。以下是StringBuilder代码:Java 刷新GUI中文本面板的显示,java,user-interface,refresh,stringbuilder,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 < memLocLis
// 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;
}
我认为这可能会刷新它,但它没有显示效果
非常感谢您的帮助。您将数组保存在一个模型类中,并通过为该类提供一个SwingPropertyChangeSupport对象和一个addPropertyChangeListener(…)方法,允许其他类“侦听”该数组。然后给数组一个setXXX(…)方法,在该方法中,在更新数组后激发SwingPropertyChangeSupport对象。在这个网站上有这样的例子,有些是我写的 例如: 顺便说一句,您对
makeTextPanel(text)
的调用不起作用,我并不感到惊讶。它创建了一个JPanel,但您似乎没有对该方法返回的JPanel执行任何操作。但你也不应该。我不认为创建新的JPanel是您想要的解决方案,而是使用我上面描述的侦听器框架更新某种组件(如JList或JTextArea)显示的字符串
如果有任何问题让人困惑,请要求澄清。您将数组保存在一个模型类中,并通过为该类提供一个SwingPropertyChangeSupport对象和一个addPropertyChangeListener(…)方法,允许其他类“侦听”。然后给数组一个setXXX(…)方法,在该方法中,在更新数组后激发SwingPropertyChangeSupport对象。在这个网站上有这样的例子,有些是我写的 例如: 顺便说一句,您对
makeTextPanel(text)
的调用不起作用,我并不感到惊讶。它创建了一个JPanel,但您似乎没有对该方法返回的JPanel执行任何操作。但你也不应该。我不认为创建新的JPanel是您想要的解决方案,而是使用我上面描述的侦听器框架更新某种组件(如JList或JTextArea)显示的字符串
如果有任何疑问,请要求澄清。谢谢。我将尝试实现这一点。我在这方面很没用,所以我可能会花很长时间,但还是会把事情搞得一团糟,但我会让你知道的。:-)谢谢这确实花了我很多时间,我确实把事情搞得一团糟,但我最终还是做到了。谢谢。我将尝试实现这一点。我在这方面很没用,所以我可能会花很长时间,但还是会把事情搞得一团糟,但我会让你知道的。:-)谢谢这确实花了我很多时间,我确实把事情搞得一团糟,但我最终还是做到了。
public void updateDisplay() {
makeTextPanel(text);
}