java - 如何通过调用方法更新 JFrame 内容 Pane ?

标签 java jframe jpanel contentpane multi-window

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

从其他论坛上看,您似乎要在 Java JFrame 中执行此操作,您必须通过添加 new JComponent(new window/layout/idk) 来更新其内容 Pane ,设置当前窗口visibility 为 false,将新的 visibility 设置为 true 并验证和/重绘内容 Pane :

    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 已经包含一个类时设置条件,因此无需提及)

最佳答案

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

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

关于java - 如何通过调用方法更新 JFrame 内容 Pane ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38477412/

相关文章:

java - 为什么扫描仪会跳过用户的输入

java - 与 JPanel 不同对象中的字体尺寸

Java 调整 JPanel 各个组件的大小

java - 如何在 Intellij IDEA 运行之前启用 Hibernate 字节码检测?

java - 使用 renderScript 放大位图的一部分

java - 如何调整 swing 应用程序的大小,以使 JFrame 的边框始终接触任务栏?

java - 当我将卡 (JComponent) 添加到 JFrame 时,如何使其完全显示在 JPanel 中?

java - 无论显示器分辨率如何,如何将 JFrame 设置为居中显示?

java - 如何使用 Infonode 库将生成的动态 View 添加到根窗口?

java - 将 AcionListener 与 GUI 分离