【问题标题】:Change instance of JPanel更改 JPanel 的实例
【发布时间】:2017-03-18 13:09:00
【问题描述】:

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

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

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

【问题讨论】:

  • 添加面板后尝试重绘

标签: java swing jpanel


【解决方案1】:

建议:

  1. 当您立即将 bkg 变量持有的当前对象替换为另一个对象时,为什么要删除/重新验证/重新绘制该变量?
  2. 在将 bkg 对象添加到 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();
}

但是重置方法很关键,具体取决于程序其余部分的结构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多