2

AWT モーダル ダイアログがあります

public class d extends java.awt.Dialog {...

ダイアログフレームで、netbeans GUI デザイナーを使用して、ダイアログ、パネル、ボタンの順に配置しました。ボタンを押してダイアログを閉じようとしています。System.exit(0) には興味がありません。

作成された netbeans ジェネレーター

private void jButtonCloseActionPerformed(java.awt.event.ActionEvent evt){ 

その関数で dispose を呼び出す必要があると思いますが、呼び出されるとダイアログが破棄されますが、ダイアログスレッドは終了しません。

デフォルトのダイアログ閉じるボタンでウィンドウが閉じられたときに、次のハンドラーが機能しています


     dialog.addWindowListener(new java.awt.event.WindowAdapter() {
       @Override
        public void windowClosing(java.awt.event.WindowEvent e) {
           Window window = SwingUtilities.getWindowAncestor(e.getComponent());
           window.dispose();
        }
     });
    

上記は正常に機能しています。つまり、スレッドは終了します。

jButtonCloseActionPerformed で同じアプローチを使用できますが、ウィンドウ オブジェクトを取得する方法がわかりません。

どうすればそれを達成できますか?他の良い解決策も大歓迎です。

大変お世話になりました。

4

1 に答える 1

0

(要するに)最良の答えは次のコードを使用することだと思います

Window window = SwingUtilities.getWindowAncestor(this);
window.dispose();

これはここで重要です。イベントなどから親オブジェクトを取得して、なんとかしてウィンドウオブジェクトを取得しようとしました。WindowClosingの場合は、確かにその方法でウィンドウオブジェクトの参照を取得できましたが、ボタンの場合は機能しませんでした...単にこれを参照してください。インターネットのほとんどの例はSystem.Exit(0)を呼び出しますが、IMHOがSystem.Exit(0)を呼び出すのは、実際のアプリではなく、例のみの場合は問題ありません。

于 2012-06-28T12:18:30.963 に答える