Java 如何在运行时刷新JPanel?

Java 如何在运行时刷新JPanel?,java,swing,user-interface,Java,Swing,User Interface,我发现这里有很多类似的话题,但我的问题更复杂 我的问题背景: 我有一个叫Main的JFrame。在这个JFrame上,我有两个按钮和一个叫做WorkingPanel的JPanel。然后我有另一个JPanel(称为PlayerPanel),但这是一个seprate文件(作为类) 现在我想,当我点击一个按钮时,它应该将WorkingPanel更改为PlayerPanel。我已经编写了以下代码 private void MenuButtonPlayerViewMouseClicked(java.awt

我发现这里有很多类似的话题,但我的问题更复杂

我的问题背景:

我有一个叫Main的JFrame。在这个JFrame上,我有两个按钮和一个叫做WorkingPanel的JPanel。然后我有另一个JPanel(称为PlayerPanel),但这是一个seprate文件(作为类)

现在我想,当我点击一个按钮时,它应该将WorkingPanel更改为PlayerPanel。我已经编写了以下代码

private void MenuButtonPlayerViewMouseClicked(java.awt.event.MouseEvent evt) {
    // TODO add your handling code here:
    WorkingPanel = new PlayerPanel();
    System.out.println(WorkingPanel.getName());
    WorkingPanel.revalidate();
    WorkingPanel.repaint();

    WorkingPanel.setVisible(true);

    Window.revalidate();
    Window.repaint();
}    
请引导我,谢谢

我发现这里有很多类似的话题,但我的问题更复杂

相反,您描述的是一个非常基本的问题,使用CardLayout很容易解决。我建议你现在就这样做。如果您已经准备好了,您的方法可以简单到:

private void MenuButtonPlayerViewMouseClicked(java.awt.event.MouseEvent evt) {
   cardLayout.show(cardPanel, WORKING_PANEL);
} 
其中cardLayout是cardLayout变量,cardPanel是显示交换JPanel的“卡”的JPanel,WORKING_PANEL是将WorkingPanel实例添加到cardPanel时使用的字符串常量


第2点:

不要在按钮上使用鼠标侦听器,因为它不会正常工作。例如,如果通过
setEnabled(true)
禁用按钮,则该按钮不会真正被禁用。相反,如教程所示,使用带有JButtons的ActionListener。这就是他们的目的


编辑
有关使用GUI的CardLayout示例,请查看:

这一款与众不同,因为它使用卡片布局,一个面板淡入另一个面板:

我发现这里有很多类似的话题,但我的问题更复杂

相反,您描述的是一个非常基本的问题,使用CardLayout很容易解决。我建议你现在就这样做。如果您已经准备好了,您的方法可以简单到:

private void MenuButtonPlayerViewMouseClicked(java.awt.event.MouseEvent evt) {
   cardLayout.show(cardPanel, WORKING_PANEL);
} 
其中cardLayout是cardLayout变量,cardPanel是显示交换JPanel的“卡”的JPanel,WORKING_PANEL是将WorkingPanel实例添加到cardPanel时使用的字符串常量


第2点:

不要在按钮上使用鼠标侦听器,因为它不会正常工作。例如,如果通过
setEnabled(true)
禁用按钮,则该按钮不会真正被禁用。相反,如教程所示,使用带有JButtons的ActionListener。这就是他们的目的


编辑
有关使用GUI的CardLayout示例,请查看:

这一款与众不同,因为它使用卡片布局,一个面板淡入另一个面板:


您可以使用替代该方法。您将能够在不同面板之间轻松高效地切换。还值得一提的是,使用
CardLayout
是一种不太详细的方法。

您可以使用它来代替这种方法。您将能够在不同面板之间轻松高效地切换。还有一点值得一提的是,使用
CardLayout
是一种不太详细的方法。

使用CardLayout,包含两个面板,但一次只显示一个。CardLayout以示例形式记录在。

使用CardLayout中,包含两个面板,但一次仅显示一个面板。CardLayout在。

我正在使用Netbeans visual designer,如何使用CardLayout?通过手工编写代码,在中有示例记录。编辑:实际上,对于一些
JPanel
,您可以在NetBeans中很容易地设置它。只需右键单击所需的
JPanel
>设置布局>CardLayout@ZulfiqarJunejo:我强烈建议您在了解所使用的库之前不要使用代码生成器。首先手工编写代码以获得这种理解。@ZulfiqarJunejo:举个例子,你在JButton上使用鼠标听筒,这是你几乎不应该做的事情,Oracle Swing教程会告诉你的事情。请看一看教程。我正在使用Netbeans visual designer,如何使用CardLayout?用手编写代码。编辑:实际上,对于一些
JPanel
,您可以在NetBeans中很容易地设置它。只需右键单击所需的
JPanel
>设置布局>CardLayout@ZulfiqarJunejo:我强烈建议您在了解所使用的库之前不要使用代码生成器。首先手工编写代码以获得这种理解。@ZulfiqarJunejo:举个例子,你在JButton上使用鼠标听筒,这是你几乎不应该做的事情,Oracle Swing教程会告诉你的事情。请看一下教程。使用标准Java命名约定是为了让人们阅读您的代码。变量名不以大写字符开头。类名确实以大写字符开头,因此您的代码很难阅读。遵循课本或教程中的指导原则。不要自己编造!使用标准Java命名约定是为了让人们阅读您的代码。变量名不以大写字符开头。类名确实以大写字符开头,因此您的代码很难阅读。遵循课本或教程中的指导原则。不要自己编造!