我正在尝试让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”。
答案 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()
边界的情况下使用CardLayout和JFrame.pack()