2011-11-28 52 views
1

我有一個JPanel,它顯示一組JLabels,它們都是在方法內部飛行計算和打印的。標籤的內容在一個ArrayList通過ActionListener更新JPanel內容

保持在另一種方法更目的是通過一個動作偵聽器添加到ArrayList這樣:

class listener implements ActionListener{ 
     public void actionPerformed(ActionEvent a){ 

      String name = myTextArea.getText(); 

      Object temp = new Object(name); 
      myList.add(temp); 
      panel = createPanel(); 
      panel.revalidate(); 
      panel.repaint(); 
      card.show(contentsPanel, "panel"); 
    } 
} 

createPanel()是什麼取ArrayList並使得它的一個顯示。

這當然有點抽象,但是這個想法依然存在。 當我嘗試更新.revalidate().repaint()面板的內容和外觀時,問題就出現了。我知道這些對象位於ArrayList中,因爲我已經測試過它,但面板不會正確重繪本身。

有什麼建議嗎?如有需要,我可以提供更多信息或代碼。

按照要求我會包括代碼。我不能將整個事情,由於大小,但這裏是它引用的方法:

private JPanel createPanel() { 
    panel = new JPanel(); 
    panel.setLayout(new GridLayout(myList.size(), 1)); 
    panel.setBackground(new Color(250, 250, 250)); 

    for(int i = 0; i < myList.size(); i++){ 
     JLabel temp = new JLabel(myList.get(i).toString()); 
     panel.add(temp); 
    } 

    return panel;  
} 
+0

PLZ提供的附加信息的代碼..也許,一個正在運行的副本,我可以複製粘貼並運行並看到.. – bragboy

+4

您不是將面板添加到您顯示的代碼段中的父組件。 –

+3

您正在創建一個新面板,而不是替換舊面板。你不應該重新創建它。 – gigadot

回答

1

你似乎沒有添加新創建的JPanel任何地方。

(它也像你分配兩個createPanelactionPerformed內場panel,也有一類叫做Object。 - 使用其已經使用java.lang任何名稱是一個壞主意)

+0

我改變了這個例子的變量名稱,因爲它們在上下文之外沒有意義。但是這個解決方案很有用,謝謝。 – Cameron