java - 如何在运行时刷新 JPanel?

标签 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();
}    

请指导我,谢谢。

最佳答案

I have found that there are many similar topics here, but my problem is something more complicated.

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

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

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


第 2 点:

不要在 JButton 上使用 MouseListener,因为它不会正常工作。例如,如果您通过 setEnabled(true) 禁用按钮,则该按钮不会真正被禁用。而是将 ActionListener 与 JButtons 一起使用,如教程将向您展示的那样。这就是它们的用途。


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

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

关于java - 如何在运行时刷新 JPanel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22578155/

相关文章:

java - 从另一个组件更新数据表(使用延迟加载)

java - 调用 repaint 不会导致在线程中调用 Paint 方法

c++ - 如何在 visual studio 中创建 Windows GUI?

Java GUI 不显示在 Ubuntu 上的 Eclipse 中

java - 如何使用已从 Cotainer 放置 JLabel 的方法?

java - 方法因未知原因不运行

java - JSplitPane : Possible to have one side empty/transparent to see lower layer underneath?

java - Spring获取数据库路径时出错

java - 通过 JNA Java 使用 SetParent 时,父窗口速度大大减慢

java - 如何将按钮 Action 监听器绑定(bind)到文本字段