Java JFrame无法关闭所有帧

时间:2016-04-19 17:10:47

标签: java swing jframe

我的JFrame有问题。我想要做的就是使用Button创建一个用于Login的JFrame,当按下Button时:它关闭Login Frame并打开Program Frame。

这是我的登录框架:

public static void main(String[] args) {

    JFrame frame = new JFrame("My Program");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

       LoginPanel primary = new LoginPanel(frame);

        frame.setPreferredSize (new Dimension (650, 500));
        frame.getContentPane().add(primary);
        frame.pack();
        frame.setVisible(true);

}

通过在构造函数中传递Frame,登录面板,打开登录面板:

public class LoginPanel extends JPanel {

JFrame fr;

class submitButton implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        ProgramFrame programFrame = new ProgramFrame();
        programFrame.setVisible(true);
        fr.setVisible(false);
        fr.dispose();
    }
  }

public LoginPanel(JFrame frame) {

    fr = frame;

    JButton submit = new JButton("Button Login");
    submit.addActionListener(new submitButton());
    add(submit);    
}

这是问题所在:

当我点击LoginPanel的按钮“按钮登录”时,它会成功打开新的ProgramFrame,但它不会关闭所有旧框架(LoginFrame)。 LoginFrame变得更小,非常少,但仍然是:

enter image description here

提前感谢您的帮助! :)

2 个答案:

答案 0 :(得分:2)

class submitButton implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        ProgramFrame programFrame = new ProgramFrame();
        programFrame.setVisible(true);
        this.dispose(); //changed line
    }
  }

你的panel已关闭,jframe仍然在没有jpanel的情况下打开 我已对您的代码进行了一些更改,现在两者都会同时处理

答案 1 :(得分:0)

您首先完全初始化JFrame,因此在JButton点击事件后,首先隐藏JFrame以后再处理它。

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class HideLoginPage{

    public static void main(String[] args){
        HideLoginPage loginPage = new HideLoginPage();

        JFrame frame = new JFrame();
        frame.setUndecorated(true);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setBounds(200, 200, 200, 100);
        loginPage.setPane(frame);
        frame.setVisible(true);
    }

    public void setPane(final JFrame frame){
        JPanel panel = new JPanel();
        panel.setLayout(new FlowLayout());

        JButton submit = new JButton("Login");
        submit.setSize(100, 30);
        panel.add(submit);

        submit.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent evt){
                JFrame newFrame = new JFrame();
                newFrame.setBounds(400, 200, 400, 400);
                newFrame.setVisible(true);

                frame.setVisible(false);
                frame.dispose();
            }
        });

        frame.getContentPane().add(panel);
    }
}