【问题标题】:How to update the JFrame Content Pane from calling a method?如何通过调用方法更新 JFrame 内容窗格?
【发布时间】:2016-11-23 11:06:49
【问题描述】:

好的,目前我正在尝试制作一个多窗口程序。

& / 重绘内容窗格:
    contentPane.add(newWindowPanel);
    currentWindowPanel.setVisible(false);
    newWindowPanel.setVisible(true);
    contentPane.validate();
    contentPane.repaint();

现在,我正在尝试和部分完成的是创建一个扩展 JPanel 的类,并且该类是我将要创建的许多其他 JPanel 类的层次结构的顶部。

在那个类中我有这个方法:

    public void updateContentPane(Container contentPane, JPanel currentPanel, JPanel nextPanel){

    contentPane.add(nextPanel);
    currentPanel.setVisible(false);
    nextPanel.setVisible(true);
    contentPane.validate();
    contentPane.repaint();
} 

当我在其中一个子类中调用此方法时,它不起作用。

    updateContentPane(WindowMain.contentPane, this, mainMenuClass);

每个子类都继承了 JPanel 特性。

“WindowMain”是一个扩展 JFrame 的类,“contentPane”是一个静态容器变量,用于保存框架 contentPane。

“this”表示当前类(继承 JPane),但“this”实际上不起作用new Object() 起作用。

“mainMenuClass”同样继承了JPanel,并且已经在这个类中实例化了。

我的目标是通过调用该方法从一个场景跳转到另一个场景。但它通过代码(调试)但没有任何反应。但是,如果我在方法中获取代码并将其放在按钮侦听器中,它就可以正常工作。

(对不起,写了这么多,可能会带来一些混乱,但我仍然需要弄清楚这一点,并且我会在 contentPane 已经包含一个类的情况下设置条件,因此无需提及)

【问题讨论】:

  • 能否添加调用此方法的代码,以便我们查看它是否真正在运行?

标签: java jframe jpanel contentpane multi-window


【解决方案1】:

你可以通过这样做来更新整个框架

frame.revalidate();
frame.repaint();

【讨论】:

  • 这没有帮助,它会运行代码但不会更新它。我将调试代码以查看内容窗格是否正在更新
猜你喜欢
  • 2012-11-01
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
相关资源
最近更新 更多