我正在编写一个程序,其中有一个带有登录gui的JPanel的JFrame。成功登录后,将调用一个清除JFrame的方法。我遇到的问题是,不是清除JFrame,而是JPanel中的东西仍然明显存在,它只是被冻结了。
创建登录gui的方法:
public void logingui() {
JPanel loginpanel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 2;
JLabel gamename = new JLabel("InvestGame By Ama291");
gamename.setFont(new Font("Arial", 1, 22));
loginpanel.add(gamename, c);
c.ipady = 20;
c.gridx = 0;
c.gridy = 1;
loginpanel.add(new JPanel(), c);
c.ipady = 10;
c.gridwidth = 1;
c.gridx = 0;
c.gridy = 2;
loginpanel.add(new JLabel("Username: "), c);
c.gridx = 1;
final JTextField userfield = new JTextField(10);
loginpanel.add(userfield, c);
c.gridx = 0;
c.gridy = 3;
loginpanel.add(new JPanel(), c);
c.gridx = 0;
c.gridy = 4;
loginpanel.add(new JLabel("Password: "), c);
c.gridx = 1;
final JPasswordField passfield = new JPasswordField(10);
loginpanel.add(passfield, c);
c.gridx = 0;
c.gridy = 5;
c.ipady = 20;
loginpanel.add(new JPanel(), c);
c.ipady = 10;
c.gridx = 0;
c.gridy = 6;
c.gridwidth = 1;
JButton createacc = new JButton("Create Account");
loginpanel.add(createacc, c);
c.gridx = 1;
JButton login = new JButton("Log In");
loginpanel.add(login, c);
add(loginpanel);
}
清除JFrame的方法:
public void gamegui() {
JPanel gamepanel = new JPanel();
removeAll();
invalidate();
validate();
repaint();
add(gamepanel);
}
有没有人知道如何在JFrame中成功删除JPanel而没有窗口内冻结的JPanel中的按钮和内容?这是我遇到的问题。
答案 0 :(得分:2)
对于登录,最好使用弹出式JDialog。然后当对话框关闭时,您只需在框架上显示面板。
另一种选择是使用Card Layout。您可以根据需要交换面板。
答案 1 :(得分:1)
从JFrame中删除组件时,组件将被删除但视觉上仍然存在。因此,要隐藏它或刷新JFrame,请使用.setVisible(false)方法。
答案 2 :(得分:0)
如果你只是添加
this.setLayout(your layout)
//你的布局=你正在使用的布局。即边界,卡等。
在gamegui()中的代码中的invalidate()和validate()方法之间。
我希望它会起作用。我没试过,但希望它会起作用。