java - Swing 卡布局

标签 java swing indexing cardlayout

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

最佳答案

下面是 CardLayout 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 对象的 vector (见下文)。看起来,当检测到名称冲突时,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;
    }
}

关于java - Swing 卡布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10723016/

相关文章:

java - 将所有 JTable 单元格设置为不可选择

java - 在 Java 中创建 GUI 的最简单方法?

java - 当我在 EDT 之外的线程上调用打印方法时没有任何反应?

r - 匹配数据框内的 id

java - 引用和复制对象、意外行为

java - 如何在JFrame显示后才读取Java中的文件?

java - SlowAES加密和java解密

hadoop - 注册 : Efficiency among query optimizers in hive

hibernate - 如何在 JPA 实体中定义非聚集索引 include 子句

java - GWT 日志显示构造函数未定义,但文件中没有编译错误