質問

何が正しいか JFrame のであり、同じ場合は、ユーザーがヒットの X closeボタンを押す Alt+F4 (Windows)?

私は私のデフォルトの操作方法を設定したい、:

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

では何をしたいので制御できます。この問題ではないと思う。

何かしていけるのではないかと思いながの原因となるGUIで行動するのと同じようにプレスの X 閉じるボタンを起こす行する

ることもあったの延長 WindowAdaptor それがすべてのインスタンスのアダプターとしてのリスナーに通 addWindowListener().私は同じ配列による通話 windowDeactivated(), windowClosing(), は、 windowClosed() として起きるの X closeボタンを押します。なくなったら仕方なオーバーラッピングウィンドウで言っ涙そのもの、する訳ではありません。

役に立ちましたか?

解決

したい場合は、GUIとしての行動においてをクリックした場合は、 X closeボタンを押して、必要なもの派遣ウィンドウは閉館イベントの Window.の ExitAction から 閉の応用 引き出しおよび設定ができるこの機能のメニュー項目の他のコンポーネントの使用 Actionsます。

frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));

他のヒント

setVisible(false); //you can't see me!
dispose(); //Destroy the JFrame object

なぎする話です。

した場合+Alt+F4またはXを利用すること"アプリケーションを終了すぐに関係なく他のWindowsまたはスレッドの実行、 System.exit(...) まい 正確に い非常に急激に,力、問題がある。

した場合+Alt+F4またはXを利用することを非表示にしますウィンドウ frame.setVisible(false) では"あり"に面しています。ユーザーがウィンドウをリサイズ継続を消費する資源-記憶できるものの、可視になると再び。

した場合+Alt+F4またはXを利用することを非表示にする画面-処分の資源であり、実際のものとは異なり、その frame.dispose() では"あり"に面しています。場合のフレームの可視窓がないその他の非デーモンスレッド、プログラムを終了します。を提示して頂ければ、窓の外にもできないものであり、それぞれを初期化さているすべてのネイティブ資源再びグラフィックバッファー、ウィンドウハンドルです。

dispose() れに最も近い行動をするんです。例えばシェアする画面でユーザーは、マルチウィンドウのウィンドウを開いAlt+F4またはXを終了するには、アプリまたは直近のアクティブウィンドウ?

Java Swingチュートリアルのコーティングのリスナー が明確なものです。

だいことかどうかを確認するためにユーザーできないウィンドウを閉:

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

ださを変更 pullThePlug() させることができ

public void pullThePlug() {
    // this will make sure WindowListener.windowClosing() et al. will be called.
    WindowEvent wev = new WindowEvent(this, WindowEvent.WINDOW_CLOSING);
    Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(wev);

    // this will hide and dispose the frame, so that the application quits by
    // itself if there is nothing else around. 
    setVisible(false);
    dispose();
    // if you have other similar frames around, you should dispose them, too.

    // finally, call this to really exit. 
    // i/o libraries such as WiiRemoteJ need this. 
    // also, this is what swing does for JFrame.EXIT_ON_CLOSE
    System.exit(0); 
}

するこの唯一の方法として次の項目で検索条件を絞 WindowListenerJFrame.DO_NOTHING_ON_CLOSE.

ここではオプション:

System.exit(0); // stop program
frame.dispose(); // close window
frame.setVisible(false); // hide window

ら抜け出たかのようなJava走る過程はとても簡単で、基本的には必要ないっぱいで仕分けもバッチリで二つの簡単なもの:

  1. 電話javaメソッド System.exit(...) でのアプリケーションの終了します。例えば、お申し込みはフレームに基づく追加することができますリスナー WindowAdapter ややコ System.exit(...) 内方法 windowClosing(WindowEvent e).

注意:呼んでおく必要があ System.exit(...) その他のプログラムでエラー。

  1. を避ける予想外の例外のjavaかどうかを確認するために口をできる方法と呼ばれます。追加した場合 System.exit(...) 右がいわけではありません生産が可能である、としているというもので、予想外の例外のjavaための方法と呼ばれています。

これは強力に関するプログラミングに関する知識.

**こでは単純なサンプル(JFrame ベース)するか電話番出口方法

import java.awt.event.*;
import javax.swing.*;

public class ExitApp extends JFrame
{
   public ExitApp()
   {
      addWindowListener(new WindowAdapter()
      {
         public void windowClosing(WindowEvent e)
         {
           dispose();
           System.exit(0); //calling the method is a must
         }
      });
   }

   public static void main(String[] args)
   {
      ExitApp app=new ExitApp();
      app.setBounds(133,100,532,400);
      app.setVisible(true);
   }
}

なり、JFrameにもトリガーのWindowListenerイベントしてみてください:

myFrame.dispatchEvent(new WindowEvent(myFrame, WindowEvent.WINDOW_CLOSING));

させるには、setdefaultcloseoperation(WindowConstants.EXIT_ON_CLOSE);

みを閉じ、JFrameが停応したアプリケーションする"出口に近い"

達成のために同様の結果として効果的にアプリケーションを終了する定しなければな

 System.exit(0);

その効果は全く同じです。

一番近いスウィングフレームプログラムになっているので行動するように思う時の"X"ボタンを押していただきます。いする必要があるということを実施WindowAdapterるニーズにセットフレームのデフォルトの操作な(DO_NOTHING_ON_CLOSE).

初期化フレームのようになります:

private WindowAdapter windowAdapter = null;

private void initFrame() {

    this.windowAdapter = new WindowAdapter() {
        // WINDOW_CLOSING event handler
        @Override
        public void windowClosing(WindowEvent e) {
            super.windowClosing(e);
            // You can still stop closing if you want to
            int res = JOptionPane.showConfirmDialog(ClosableFrame.this, "Are you sure you want to close?", "Close?", JOptionPane.YES_NO_OPTION);
            if ( res == 0 ) {
                // dispose method issues the WINDOW_CLOSED event
                ClosableFrame.this.dispose();
            }
        }

        // WINDOW_CLOSED event handler
        @Override
        public void windowClosed(WindowEvent e) {
            super.windowClosed(e);
            // Close application if you want to with System.exit(0)
            // but don't forget to dispose of all resources 
            // like child frames, threads, ...
            // System.exit(0);
        }
    };

    // when you press "X" the WINDOW_CLOSING event is called but that is it
    // nothing else happens
    this.setDefaultCloseOperation(ClosableFrame.DO_NOTHING_ON_CLOSE);
    // don't forget this
    this.addWindowListener(this.windowAdapter);
}

きのフレームプログラムにより送信するのWINDOW_CLOSINGイベントのようになります:

WindowEvent closingEvent = new WindowEvent(targetFrame, WindowEvent.WINDOW_CLOSING);
Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(closingEvent);

このフレームの"X"ボタンを押していただきます。

ればならないかもしれませんせいへの応用を停止するJFrameが閉まし

用途: setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

代わりに: setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

この概要の解決を見い

 myFrame.dispatchEvent(new WindowEvent(myFrame, WindowEvent.WINDOW_CLOSING));

この例示を実現するかの確認画面を閉動作します。

のウィンドウのウィンドウのアダプタをスイッチのデフォルトに近い操作を EXIT_ON_CLOSEまたは DO_NOTHING_ON_CLOSE に依存して解答の OptionDialog.

の方法 closeWindowConfirmedCloseWindow 火災、ウィンドウを閉じイベントとあらゆる場所で使用できるアクションのメニュー項目

public class WindowConfirmedCloseAdapter extends WindowAdapter {

    public void windowClosing(WindowEvent e) {

        Object options[] = {"Yes", "No"};

        int close = JOptionPane.showOptionDialog(e.getComponent(),
                "Really want to close this application?\n", "Attention",
                JOptionPane.YES_NO_OPTION,
                JOptionPane.INFORMATION_MESSAGE,
                null,
                options,
                null);

        if(close == JOptionPane.YES_OPTION) {
           ((JFrame)e.getSource()).setDefaultCloseOperation(
                   JFrame.EXIT_ON_CLOSE);
        } else {
           ((JFrame)e.getSource()).setDefaultCloseOperation(
                   JFrame.DO_NOTHING_ON_CLOSE);
        }
    }
}

public class ConfirmedCloseWindow extends JFrame {

    public ConfirmedCloseWindow() {

        addWindowListener(new WindowConfirmedCloseAdapter());
    }

    private void closeWindow() {
        processWindowEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
    }
}

に基づく回答させていただここでは、こうして実施す:

JFrame frame= new JFrame()
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// frame stuffs here ...

frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));

のJFrameを取得しますイベントがあり、更されます。

この答えによるアレックスしたいと思います。たところ、うまくいったので私にとって、もうひとつでわかりやすくエネルギーのことです。

setVisible(false); //you can't see me!
dispose(); //Destroy the JFrame object

に挿入すにはAWTのメッセージキューですべてのタイミングが正しくない派遣は、正しいイベント配列は、特にマルチスレッドプログラム。こうしたことを考慮することでお取り扱いは、イベント配列として使う場合は、ユーザがクリックし、[x]ボタンをOS suppled飾られたJFrame.

public void closeWindow()
{
    if(awtWindow_ != null) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                awtWindow_.dispatchEvent(new WindowEvent(awtWindow_, WindowEvent.WINDOW_CLOSING));
            }
        });
    }
}

しかしこの、独自のコード formWindowClosing() イベントです。

 private void formWindowClosing(java.awt.event.WindowEvent evt) {                                   
    int selectedOption = JOptionPane.showConfirmDialog(null,
            "Do you want to exit?",
            "FrameToClose",
            JOptionPane.YES_NO_OPTION);
    if (selectedOption == JOptionPane.YES_OPTION) {
        setVisible(false);
        dispose();
    } else {
        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
    }
}    

この問ユーザーかしたい口のフレームや願います。

投稿したの質問とCWの答えです。

を共有することを望みました結果、主に由来から以下のcamickrのリンク基本的にはいる WindowEvent.WINDOW_CLOSING のアプリケーションのイベントディキューに挿入しますこの概要の解決のように見え

// closing down the window makes sense as a method, so here are
// the salient parts of what happens with the JFrame extending class ..

    public class FooWindow extends JFrame {
        public FooWindow() {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setBounds(5, 5, 400, 300);  // yeah yeah, this is an example ;P
            setVisible(true);
        }
        public void pullThePlug() {
                WindowEvent wev = new WindowEvent(this, WindowEvent.WINDOW_CLOSING);
                Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(wev);
        }
    }

// Here's how that would be employed from elsewhere -

    // someplace the window gets created ..
    FooWindow fooey = new FooWindow();
    ...
    // and someplace else, you can close it thusly
    fooey.pullThePlug();

ない場合はお申込終了時JFrameを閉じると、 用途:させるには、setdefaultcloseoperation(JFrame.Dispose_on_closeで)

代わりに:させるには、setdefaultcloseoperation(JFrame.EXIT_ON_CLOSE);

からのドキュメンテーション

DO_NOTHING_ON_CLOSE (defined in WindowConstants):なん;のプログラムの運営のwindowClosingメソッドで処理を登録されているWindowListenerオブジェクト.

HIDE_ON_CLOSE (defined in WindowConstants):自動的に非表示フレームの後に呼び出登録されているWindowListenerオブジェクト。

DISPOSE_ON_CLOSE (defined in WindowConstants):自動的に非表示と処理は、フレームの後に呼び出登録されているWindowListenerオブジェクト。

EXIT_ON_CLOSE (defined in JFrame):アプリケーションを終了システムを用い口方法です。アプリケーションでだけ使用.

も役立つことがある:利用できる setVisible(false) おJFrameに表示したい場合は、同じフレームです。その他コ dispose() すべて削除し、ネイティブスク資源です。

からコピーされたPeter Lang

https://stackoverflow.com/a/1944474/3782247

 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top