0

同じ識別子を持つ 2 つのカードを追加するときの cardlayout のデフォルトの動作は何ですか。たとえば、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)

カスパー

于 2012-05-23T15:29:53.377 に答える