当您添加两张具有相同标识符的卡片时,卡片布局的默认行为是什么。例如,如果添加了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/