java - 更改 JPanel 的实例

标签 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 组件都会消失(如我所愿),但我放置在构造函数中的 SlideShow 组件中没有任何内容出现...如何更改bkg JPanel 到另一个扩展 JPanel 的外部类?

最佳答案

建议:

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

但是,重置方法将是关键,详细信息取决于程序其余部分的结构。

关于java - 更改 JPanel 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42874806/

相关文章:

Java UIManager - 更改组件样式

java - 主要监听器和执行的操作

java - 我怎样才能让我的标签和文本字段出现在java的边框布局中?

java - Netbeans 的属性窗口中使用了哪些 gui 元素?

java - 把JPanel放在JFrame上有什么用吗?

java - 如何最小化四个面板中的一个面板

java - 导入oracle.jdbc无法解决

java - 我需要编码到 XML 我的 XML 文件中出现重复值

java - Tomcat 在使用 WebappRunner 时卡在 "Starting ProtocolHandler"

java - 按匈牙利语字母顺序对匈牙利语字符串列表进行排序