繁体   English   中英

如何通过调用方法更新JFrame内容窗格?

[英]How to update the JFrame Content Pane from calling a method?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM