我发现这里有很多类似的主题,但我的问题更复杂。
我的问题背景: -
我有一个名为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();
}
请指导我,谢谢。
答案 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。
中记录了示例