我已经创建了一个带有加载组件的 JPanel,称为 bkg,所以我想将其更改为 SlideShow,它扩展了 jpanel,并在单击按钮时显示它。这是从按钮调用的代码:
public void startGame(){
bkg.removeAll();
bkg.revalidate();
bkg.repaint();
bkg = new SlideShow();
contentPane.add(bkg, BorderLayout.CENTER);
}
在 SlideShow 构造函数中,我创建了一些测试标签,但是当我单击按钮时,所有旧的 bkg 组件都会消失(如我所愿),但我放置在构造函数中的 SlideShow 组件中没有任何内容出现...如何更改bkg JPanel 到另一个扩展 JPanel 的外部类?
最佳答案
建议:
- 当您立即用另一个变量替换该变量所持有的当前对象时,为什么要删除/重新验证/重新绘制 bkg 变量?
- 您想要重新验证和重新绘制的是在将 bkg 对象添加到 contentPane 后替换它之后的 contentPane。
- 使用 CardLayout 几乎总是比手动交换更好。该教程可以在这里找到:CardLayout tutorial .
- 或者,因为看起来您正在重新开始游戏,也许可以为 SlideShow 类提供一个
reset()
方法,该方法将其模型及其可见状态设置为其原始条件.
所以
public void startGame(){
// *** no need for this ***
// bkg.removeAll();
// bkg.revalidate();
// bkg.repaint();
bkg = new SlideShow();
contentPane.add(bkg, BorderLayout.CENTER);
// *** add this ***
contentPane.revalidate();
contentPane.repaint();
}
或者如果您选择重置选项,那么该方法将简化为:
public void startGame(){
bkg.reset();
}
但是,重置方法将是关键,详细信息取决于程序其余部分的结构。
关于java - 更改 JPanel 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42874806/