如何在运行时刷新JPanel?

时间:2014-03-22 13:21:40

标签: java swing user-interface

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

我的问题背景: -

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

现在我希望当我点击一个按钮时,它应该将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();
}    

请指导我,谢谢。

3 个答案:

答案 0 :(得分:3)

  

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

相反,您的描述是一个相当基本的问题,使用CardLayout很容易解决。我建议你现在就这样做。如果你有它,你的方法可以简单:

private void MenuButtonPlayerViewMouseClicked(java.awt.event.MouseEvent evt) {
   cardLayout.show(cardPanel, WORKING_PANEL);
} 

其中cardLayout是您的CardLayout变量,cardPanel是显示交换JPanels的“卡片”的JPanel,而WORKING_PANEL是您将WorkingPanel实例添加到cardPanel时使用的String常量。


第2点:

不要在JButton上使用MouseListener,因为它不会正常运行。例如,如果您通过setEnabled(true)禁用该按钮,则不会真正禁用该按钮。而是使用带有JButton的ActionListener,教程将向您展示。这就是它们的用途。


修改
有关使用CardLayout的GUI的示例,请查看:

这个是不寻常的,因为它使用CardLayout并且有一个面板淡入另一个面板:

答案 1 :(得分:3)

您可以使用CardLayout代替该方法。您将能够非常轻松有效地在不同面板之间切换。它还提到使用CardLayout的方法不那么冗长。

答案 2 :(得分:3)

使用包含两个面板的CardLayout,但一次只显示一个面板。 CardLayout在Swing tutorial

中记录了示例