CardLayout交换面板

时间:2010-02-24 14:11:24

标签: java swing

在我的项目中,我在JFrame中有一个需要交换的JPanel(bottomPanel),所以我在bottomPanel上使用了CardLayout。

在我的父JFrame中,我基本上在一个方法(setBottomPanel)中获得了这个代码:

bottom.add(p.toString(),p);
bottomLayout.show(bottom, p.toString());

我在父JFrame的构造函数中调用它一次,它工作正常。但是,我将对此父JFrame的引用传递给其他JPanels,如果我在引用上调用setBottomPanel()它没有效果,则面板不会更改。 我确实使用了bottomLayout.next(bottom),这确实改变了面板,但是改为空面。

更新

它似乎正确加载,我将代码更改回调用next()但正在传递的JPanel为空。这可能是因为我在JPPanel上使用了GridLayout并将其添加到bottomPanel中吗?我根本没有传递布局参考...

2 个答案:

答案 0 :(得分:2)

您确定您提供的代码示例反映了您正在使用的源代码吗?因为,假设bottomJPanelpJComponent,您对bottom.add的调用应该传递组件,然后是布局约束:

bottom.add (p, p.toString());

当您从其他JPanels拨打setBottomPanel()时,您是否再次将组件添加到bottom,或者只是在新的时候添加它们?如果是前者,bottom很可能不会被重新验证或重新绘制。从Java API:“如果已将组件添加到已显示的容器中,则必须在该容器上调用validate以显示新组件。”

答案 1 :(得分:0)

想出来:

问题是传递给方法的JPanel有一个GridLayout,并且元素被添加到布局中。一旦我改变了构建JPanel的方式,代码就可以正常工作了:)

谢谢!