Java - 添加/删除JPanel类

时间:2014-08-12 11:07:58

标签: java swing jframe jpanel

我正在尝试让JPanels从一个交换到另一个。听起来很简单,但由于我的面板都在不同的班级,我很挣扎。

我有4节课:   - GUI(主类)   - BankingAppMainFrame(JFrame类)   - BankingAppStartPanel(JPanel类)< - 我想删除这个JPanel   - BankingAppLoginPanel(JPanel类)< - 我想添加这个JPanel

这是我的相关JFrame代码:

//This is the only way i didn't get errors xD
public void panelSwap(JFrame z, JPanel x, JPanel y) {
    z.remove(x);
    z.add(y);
}

这是我的相关BankingAppStartPanel代码:

LoginButton.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent event) {

        //I thought I'd need to instance all my classes

        BankingAppMainFrame mainFrame = new BankingAppMainFrame();
        BankingAppStartPanel startPanel = new BankingAppStartPanel();
        BankingAppLoginPanel loginPanel = new BankingAppLoginPanel();

        //This is calling the panelSwap method from the main Class

        mainFrame.panelSwap(mainFrame, startPanel, loginPanel);
    }
});

此时,BankingAppLoginPanel只是一个空白面板,直到我可以开始工作。

我要做的是删除当前的Panel(在本例中为“BankingAppStartPanel”,并将其替换为“BankingAppLoginPanel”。

2 个答案:

答案 0 :(得分:3)

如果您计划继续使用此“交换”面板方法,最好尝试使用Card Layout

答案 1 :(得分:3)

//This is the only way i didn't get errors xD
public void panelSwap(JFrame z, JPanel x, JPanel y) {
    z.remove(x);
    z.add(y);
}
  • LayoutManager没有在API中实现通知可见Swing GUI更改的任何通知程序,您必须通过调用z.revalidate()和{{1}以编程方式通知}

  • 在您需要更改JFrame界限的情况下调用z.repaint()时有快捷方式


  • 在需要更改JFrame.pack()边界的情况下使用CardLayoutJFrame.pack()