2012-05-23 48 views
0

當您添加兩張具有相同標識符的卡時,cardlayout的默認行爲是什麼。例如,如果已添加panel1。後來在程序中,我添加了panel2以及相同的字符串標識符。缺省行爲是用卡片堆棧中的panel2代替panel1? 謝謝擺動CardLayout

+1

親自試一試,你會看到:) ...我認爲你可以在文檔http://docs.oracle.com/javase/tutorial/uiswing/layout/card中找到它。 html – user219882

回答

2

可以添加多個具有相同標識符的卡片。您可以[編輯] 只有 仍然 導航到 show(Container, String)顯示面板添加[編輯] 第一 最後 [/編輯]。

卡斯帕

+0

感謝您的幫助 – user1406416

4

下面是CardLayout's實施addLayoutComponent()其通過addLayoutComponent(Component comp, Object constraints)執行。

public void addLayoutComponent(String name, Component comp) { 
    synchronized (comp.getTreeLock()) { 
     if (!vector.isEmpty()) { 
      comp.setVisible(false); 
     } 
     for (int i=0; i < vector.size(); i++) { 
      if (((Card)vector.get(i)).name.equals(name)) { 
       ((Card)vector.get(i)).comp = comp; 
       return; 
      } 
     } 
     vector.add(new Card(name, comp)); 
    } 
} 

CardLayout保持Card對象(見下文)的向量。看起來像是當檢測到名稱衝突時,Card中的Component具有相同的名稱將替換爲新的Component被添加。因此,帶有特定名稱的show()將顯示已添加該名稱的組件最後組件。

class Card implements Serializable { 
    static final long serialVersionUID = 6640330810709497518L; 
    public String name; 
    public Component comp; 
    public Card(String cardName, Component cardComponent) { 
     name = cardName; 
     comp = cardComponent; 
    } 
}