2012-07-09 62 views
1

我有更多“我无法编程”的问题。在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); 
} 

我想这可能刷新它,但它没有显示效果。

任何帮助表示赞赏。

回答

1

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

例如:hereherehere,...

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

如果有任何疑惑,请要求澄清。

+0

谢谢。我会去实施它。 我在这很没用,所以我可能需要很长时间,但仍然会弄得一团糟,但我会让你知道的。 :-) – Robert 2012-07-09 21:44:55

+1

谢谢。它确实花了我很多时间,我确实弄得一团糟,但最终我到了那里。 – Robert 2012-08-07 13:57:59