我发现这里有很多类似的主题,但我的问题比较复杂。
我的问题的背景:-
我有一个名为 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 的示例,请查看:
- > getting Jcomponent from other class changes frame size
- > Java CardLayout Main Menu Problem
- > Change size of JPanel using CardLayout
- > Java CardLayout JPanel moves up, when second JPanel added
- > Java swing; How to toggle panel's visibility?
- > Clear components of JFrame and add new componets on the same JFrame
- > gui multiple frames switch
- > JLabel displaying countdown, java
这个不寻常,因为它使用 CardLayout 并且有一个面板淡入另一个面板:
关于java - 如何在运行时刷新 JPanel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22578155/