首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CardLayout交换面板

CardLayout交换面板
EN

Stack Overflow用户
提问于 2010-02-24 22:11:24
回答 2查看 1.2K关注 0票数 0

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

在我的父JFrame中,我实际上已经在一个方法(SetBottomPanel)中获得了以下代码:

代码语言:javascript
复制
bottom.add(p.toString(),p);
bottomLayout.show(bottom, p.toString());

我在父JFrame的构造函数中调用了它一次,它工作得很好。但是,我将这个父JFrame的引用传递给其他JPanels,如果我在该引用上调用setBottomPanel(),则面板不会改变。我用的是bottomLayout.next(bottom),这确实改变了面板,但变成了一个空的面板。

更新:

它看起来加载正确,我把代码改回调用next(),但是传递的JPanel是空的。这会不会是因为我在添加到bottomPanel的JPanel上使用了GridLayout?我根本没有传入布局引用...

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-24 22:56:26

弄清楚了:

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

谢谢!

票数 0
EN

Stack Overflow用户

发布于 2010-02-24 22:44:31

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

代码语言:javascript
复制
bottom.add (p, p.toString());

当您从另一个JPanels调用setBottomPanel()时,您是再次将组件添加到bottom中,还是仅在它们是新组件时才添加它们?如果是前者,则很可能bottom根本没有被重新验证或重新绘制。在Java API中:“如果已将组件添加到已显示的容器中,则必须在该容器上调用validate才能显示新组件。”

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2326555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档