JFrame不处理

时间:2013-05-02 15:24:27

标签: java swing jframe dispose

我试图按下按钮处理我的JFrame。但是,当我单击按钮时,一切都会执行,但JFrame不会关闭!为什么是这样?在它之后直接打开另一个JFrame会有问题吗?

public static void login() {
    JFrame loginFrame = new JFrame();
    JPanel loginPanel = new JPanel();
    JButton loginButton = new JButton("Login");
    JLabel usernameText = new JLabel("Username:");
    JLabel passwordText = new JLabel("Password:");
    final JTextField usernameField = new JTextField(15);
    final JTextField passwordField = new JTextField(15);
    status.setForeground(Color.RED);

    new LoginBackground();

    loginPanel.add(usernameText);
    loginPanel.add(usernameField);
    loginPanel.add(passwordText);
    loginPanel.add(passwordField);
    loginPanel.add(loginButton, BorderLayout.CENTER);
    loginPanel.add(status);
    loginFrame.add(loginPanel);

    loginPanel.add(loginBackgroundLabel);
    loginFrame.add(loginPanel);

    loginFrame.repaint();
    loginFrame.setVisible(true);
    loginFrame.setSize(1200, 800);

    loginPanel.setLayout(null);

    usernameText.setSize(100, 100);
    passwordText.setSize(100, 100);

    usernameText.setFont(new Font("Serif", Font.PLAIN, 20));
    usernameText.setForeground(Color.white);

    passwordText.setFont(new Font("Serif", Font.PLAIN, 20));
    passwordText.setForeground(Color.white);

    loginBackgroundLabel.setLocation(0, 0);
    usernameText.setLocation(555, 230);
    passwordText.setLocation(555, 290);
    usernameField.setLocation(500, 300);
    passwordField.setLocation(500, 350);
    loginButton.setLocation(550, 400);
    status.setLocation(500, 450);

    loginPanel.revalidate();
    loginFrame.repaint();

    try {
        Thread.sleep(1000);
    } catch (InterruptedException e2) {
        e2.printStackTrace();
    }

    new Sound();

    login = false;

    loginButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                Frame.loginFrame.setVisible(false);
                Frame.loginFrame.dispose();
                username = usernameField.getText();
                password = passwordField.getText();
                Connect.checkLogin();
                Sound.clip.stop();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
        }
    });
}

1 个答案:

答案 0 :(得分:3)

设置window action on close, as dispose on close

setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE );