Java - сообщение при закрытии окна JFrame

У меня есть Java-программа, содержащая класс Application, наследуемый от JFrame.

Я хочу отобразить сообщение, которое спрашивает пользователя, хочет ли он выйти из программы, нажав кнопку X в правом верхнем углу окна.

Это мой код до сих пор:

Я получил этот код из учебника, который нашел в Интернете. Я сам написал обработчик события WindowClosing. Однако у меня возникли проблемы с регистрацией прослушивателя окон (addWindowListener). Это говорит мне, что WindowAdapter является абстрактным и не может быть создан.

Как я могу решить эту проблему, пожалуйста?


person Matthew    schedule 16.11.2012    source источник
comment
Вы уверены, что хотите решить эту проблему? (ТМ) ;-)   -  person assylias    schedule 16.11.2012
comment
Конечно, я хочу решить эту проблему;)   -  person Matthew    schedule 16.11.2012


Ответы (3)


В принципе, вы почти правильно поняли. Есть несколько вещей, которые не правильно собраны и опечатка.

Сначала удалите свой метод WindowClosing (это window, а не Window). Затем замените свой addWindowListener(new WindowAdapter()); кодом ниже.

addWindowListener(new WindowAdapter() {
  public void windowClosing(WindowEvent e) {
    int confirmed = JOptionPane.showConfirmDialog(null, 
        "Are you sure you want to exit the program?", "Exit Program Message Box",
        JOptionPane.YES_NO_OPTION);

    if (confirmed == JOptionPane.YES_OPTION) {
      dispose();
    }
  }
});
person Dan D.    schedule 16.11.2012
comment
Большое спасибо за вашу помощь :) Ваше решение сработало отлично :) - person Matthew; 16.11.2012
comment
@Matthew Если вы используете Java 5 (+), вы можете использовать аннотацию @Override, чтобы показать, что вы намеревались расширить метод в суперклассе, то есть windowClosing. Тогда вы получили бы ошибку компиляции из-за вашей опечатки. - person Duncan Jones; 16.11.2012
comment
@DuncanJones Спасибо за ваше предложение :) - person Matthew; 16.11.2012

я получил это за две минуты кодирования....

Сначала устанавливается событие закрытия j-го кадра по умолчанию в Exit_on_close. Во-вторых, создайте класс под названием «Обработчик событий закрытия окна», а затем вызовите его на начальной стадии.

private void WindowClosingEventHandler(){ addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { int confirmed = JOptionPane.showConfirmDialog(null, "Are you sure you want to exit this application?", "Exit Program Message Box",JOptionPane.YES_NO_OPTION);

    if (confirmed == JOptionPane.YES_OPTION) {
        try{
            String login=txtuserid.getText();
            Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/repair", "root", "");
            Statement st = conn.createStatement();
            String update = "UPDATE user set User_Status=0 where UserID='"+ login +"'";
            st.executeUpdate(update);  
            dispose();
            Login2 dialog = new Login2(new javax.swing.JFrame(), true);
            dialog.setVisible(true);
        }catch(SQLException | HeadlessException q){
            JOptionPane.showMessageDialog(null, q);
        }
        System.exit(0);
    }
    else{
        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
    }
}
});
}
person Synester    schedule 02.07.2013

Хорошо, попробуйте еще раз.

Вы не можете создать новый WindowAdapter, потому что WindowAdapter является абстрактным. Абстрактные классы не могут быть созданы. Вам нужно будет создать подкласс WindowAdapter и реализовать его абстрактные методы как общедоступные.

http://docs.oracle.com/javase/7/docs/api/java/awt/event/WindowAdapter.html

person Scuba Steve    schedule 16.11.2012