更改JPanel的实例

时间:2017-03-18 13:09:00

标签: java swing jpanel

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

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

在SlideShow构造函数中,我创建了一些测试标签,但是当我单击按钮时,所有旧的bkg组件都会消失(我想要的)但是我放在costructor中的SlideShow组件中没有任何内容出现...如何更改bkg JPanel到另一个扩展JPanel的外部类?

1 个答案:

答案 0 :(得分:2)

建议:

  1. 当您立即将该变量持有的当前对象替换为另一个时,为什么要删除/重新验证/重新刷新bkg变量?
  2. 在将bkg对象添加到contentPane之后替换bkg对象后,要重新验证和重新绘制的内容是contentPane。
  3. 使用CardLayout而不是手动交换几乎总是更好。可以在此处找到该教程:CardLayout tutorial
  4. 或者因为看起来你正在重新开始一个游戏,或许然后给SlideShow类一个reset()方法,一个将它的模型和它的可见状态设置为原始状态。
  5. 所以

    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();
    }
    

    然而,重置方法是关键,细节取决于程序其余部分的结构。