web-dev-qa-db-ja.com

Swing JDialogの「X」ボタンを削除

JDialogタイトルバーから閉じるボタン( "X")を削除する方法はありますか?

58
richs

dialog.setUndecorated(true)を呼び出すことでダイアログのタイトル全体を削除できますが、これはダイアログをこれ以上移動できないことを意味します。

dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE)を実行して、ボタンが何もしないようにすることもできます。

それ以外に、Xを完全に削除する方法があるとは思わない。

56
Huxi

dialog.setUndecorated(true)を呼び出してタイトルバーを削除できると思います。ただし、「X」だけではわかりません。

ただし、ユーザーがダイアログを簡単に閉じることができるようにしたいので、「X」を削除するのは良い考えではありません。

最善の策は、dialog.setDefaultCloseOperationまたはWindowListenerを使用して、ユーザーが「X」をクリックしたときに何が起こるかを制御することです。

12
thedude19

Java 1.7(別名DolphinまたはJava 7)の時点で、ウィンドウの閉じるボタンを無効にしたり削除したりすることはできません。 frame.setResizable(false)のボタンを使用し、Java.awt.Dialogまたはjavax.swing.JDialogなどのボタンを拡張するクラスを使用して、最小化ボタンと最大化ボタンを削除できます。タイトルバー、境界線、 frame.setUndecorated(true)のボタン。frame.setDefaultLookAndFeelDecorated(true)でタイトルバーのすべてのボタンの表示を完全に制御できます(ただし、クロスプラットフォームの互換性とOSの統合は失われます)(JFrameまたはJDialog)。これは、現在のJDKで可能なすべてのコントロールです。

9
Supuhstar

私の経験は次のとおりです。

  • setUndecorated(true)を使用してみました:Dialog全体を非表示にしました。
  • setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE)を試しました:これは動作をまったく変更しませんでした。私のダイアログボックスはまだ閉じています。デフォルトのクローズ操作を_DO_NOTHING_ON_CLOSE_に設定すると、クローズ操作が登録済みWindowListenerwindowClosing()メソッドに委任されます。

私のために働いたのは:

_setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
//Remove any existing WindowListeners
for ( WindowListener wl : this.getWindowListeners())
        this.removeWindowListener(wl);
this.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent e) {
                 if ("Optional condition") {
                      JOptionPane.showMessageDialog(null, "You cannot close this window");
                 }
        }
});
_
4
Ryuu

推測では、PL&Fで装飾されるように設定し、名前でコンポーネントを削除します。