2017-03-18 53 views
0

我创建了一个带有加载组件的JPanel,名为bkg,因此我想将其更改为SlideShow,它扩展了jpanel,并在单击按钮时显示它。这是从按钮调用的代码:更改JPanel的实例

public void startGame(){ 
    bkg.removeAll(); 
    bkg.revalidate(); 
    bkg.repaint(); 
    bkg = new SlideShow(); 
    contentPane.add(bkg, BorderLayout.CENTER); 
} 

在我创建了一些测试标签的幻灯片构造,但是当我按一下按钮,所有旧BKG组件的消失(我想),但是从幻灯片什么我放置在构造函数中的组件显示...如何将bkg JPanel更改为扩展JPanel的另一个外部类?

+0

添加面板后尝试重新绘制 – csirmazbendeguz

回答

2

建议:

  1. 为什么删除/重新确认/重绘BKG变量时,你立即更换用另一种变量保持的当前对象?
  2. 要重新验证并重新绘制这是什么添加到contentPane后更换BKG对象之后的contentPane。
  3. 使用CardLayout几乎总是更好,而不是手动交换。该教程可以在这里找到:CardLayout tutorial
  4. 或者因为它看起来像是重新开始游戏,所以可能会给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(); 
} 

但是,这种复位方法是关键,细节取决于结构你的程序的其余部分。