0

当您添加两张具有相同标识符的卡片时,卡片布局的默认行为是什么。例如,如果panel1添加了哪个。稍后在程序中,我添加panel2了相同的字符串标识符。卡组中的默认行为是要替换panel1的吗?panel2谢谢

4

2 回答 2

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对象向量(见下文)。看起来当检测到名称冲突时,Component具有Card相同名称的名称被替换为新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;
    }
}
于 2012-05-23T15:56:49.687 回答
2

可以添加多张具有相同标识符的卡片。您只能 [edit]仍然[ /edit] 导航到两者show(Container, String)显示面板添加 [edit] first last [/edit]。

卡斯帕

于 2012-05-23T15:29:53.377 回答