【发布时间】:2016-02-13 06:31:31
【问题描述】:
所以我正在尝试制作一个基本程序来了解有关 java 的更多信息,但我在切换屏幕时遇到了麻烦。我想有一个显示类,我可以在其他类中调用它来处理所有面板等,然后创建一个类来构建每个面板。我目前正在尝试做的是使用我的开始菜单类中的按钮使用显示类中的方法从一个面板更改为另一个面板。
这是startmenu 类中的代码:
public void actionPerformed(ActionEvent e)
{
display.switchPanel("Start");
}
这是我的展示类:
公开课展示 { JFrame框架; StartMenu start = new StartMenu(); MainMenu main = new MainMenu(); JPanel 面板 = 新 JPanel(); JPanel startPanel = start.createPanel(); JPanel mainPanel = main.createPanel(); CardLayout card = new CardLayout(); BorderLayout 边框 = new BorderLayout(); 公共无效创建显示() { frame = new JFrame("插入名称"); frame.setPreferredSize(新维度(800,600)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(面板, BorderLayout.CENTER); panel.setLayout(边框); panel.add(startPanel); panel.add(mainPanel); mainPanel.setVisible(false); startPanel.setVisible(true); 框架。添加(面板); 框架.pack(); frame.setVisible(true); frame.setResizable(false); } 公共无效开关面板(字符串 x) { 字符串 p = x; 如果(p.equals(“开始”)) { mainPanel.setVisible(true); startPanel.setVisible(false); } } }【问题讨论】:
-
使用您当前的方法,您将无法解决与
BorderLayout斗争的问题,因为它只会在其 5 个可用位置中的任何一个位置管理单个组件。相反,您应该使用CardLayout,这就是它的设计目的。更多详情请见How to Use CardLayout -
我之前使用的是cardlayout,我在createDisplay方法之前设置了它。但是,当我尝试使用 .show 时,它在我在 startmenu 类中调用的方法中一直给我一个错误
-
@MadProgrammer 这是我之前使用卡片布局的代码。 ' public void switchPanel(String x) { String p = x; if(p.equals("开始")) { card.show(panel, "2"); } }' 'panel.setLayout(card); panel.add(startPanel, "1"); panel.add(mainPanel, "2");'