2012-07-09 64 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