5

JFrame から継承するクラスApplicationを含む Java プログラムがあります。

ウィンドウの右上にある [X] ボタンをクリックしたときに、プログラムを終了するかどうかをユーザーに尋ねるメッセージを表示したいと考えています。

これまでの私のコードは次のとおりです。

このコードは、オンラインで見つけたチュートリアルから取得しました。WindowClosing イベント ハンドラーは自分でコーディングしました。ただし、ウィンドウリスナー (addWindowListener) の登録に問題があります。WindowAdapter は抽象的で、インスタンス化できないと言っています。

どうすればこの問題を解決できますか?

4

3 に答える 3

17

基本的に、ほぼ正解です。正しくまとめられていないものとタイプミスがいくつかあります。

最初に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();
    }
  }
});
于 2012-11-16T15:54:01.857 に答える
2

私は2分のコーディングでこれを手に入れました....

まず、Exit_on_close で j フレームのデフォルトの終了イベントを設定します。次に、「Window Closing Event Handler」というクラスを作成し、それを init ステージで呼び出します。

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);
    }
}
});
}
于 2013-07-02T06:10:39.973 に答える
0

再試行します。

WindowAdapter は抽象的であるため、新しい WindowAdapterを作成することはできません。抽象クラスはインスタンス化できません。WindowAdapter のサブクラスを作成し、その抽象メソッドを public として実装する必要があります。

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

于 2012-11-16T19:35:52.873 に答える