JOptionPane の左上隅にある閉じる x を無効にしたいのですが、どうすればよいですか?
4 に答える
マイケル、
閉じる [x] ボタンを無効にする方法がわかりません。または、ユーザーがクリックしても何もできません。以下のコードを確認してください。
JOptionPane pane = new JOptionPane("message");
JDialog dialog = pane.createDialog(null, "Title");
dialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
dialog.setVisible(true);
それはあなたにとって合理的ですか?
JOptionPane で宣言されたキャンセル ボタンで終了ボタンを上書きし、それに応じてキャンセル操作を処理できます。
JOptionPane optionPane= new JOptionPane("message", JOptionPane.OK_CANCEL_OPTION);
final JDialog dialog = optionPane.createDialog(null, "Input");
dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
dialog.addWindowListener(new WindowAdapter() {
@Override public void windowClosing(WindowEvent e) {
optionPane.setValue(JOptionPane.CANCEL_OPTION);
}
});
if (JOptionPane.CANCEL_OPTION!= ((Integer) optionPane.getValue()).intValue())
throw new myCancellationException();
ユーザーがオプションを選択せずにダイアログを閉じようとすると、いつでもダイアログを再度表示できます。デフォルトの終了動作を上書きする方法の例がsun.comにあります。「Stopping Automatic Dialog Closing」の下を見てください。次のコードがあります。
final JOptionPane optionPane = new JOptionPane(
"The only way to close this dialog is by\n"
+ "pressing one of the following buttons.\n"
+ "Do you understand?",
JOptionPane.QUESTION_MESSAGE,
JOptionPane.YES_NO_OPTION);
final JDialog dialog = new JDialog(frame,
"Click a button",
true);
dialog.setContentPane(optionPane);
dialog.setDefaultCloseOperation(
JDialog.DO_NOTHING_ON_CLOSE);
dialog.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
setLabel("Thwarted user attempt to close window.");
}
});
optionPane.addPropertyChangeListener(
new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
String prop = e.getPropertyName();
if (dialog.isVisible()
&& (e.getSource() == optionPane)
&& (prop.equals(JOptionPane.VALUE_PROPERTY))) {
//If you were going to check something
//before closing the window, you'd do
//it here.
dialog.setVisible(false);
}
}
});
dialog.pack();
dialog.setVisible(true);
int value = ((Integer)optionPane.getValue()).intValue();
if (value == JOptionPane.YES_OPTION) {
setLabel("Good.");
} else if (value == JOptionPane.NO_OPTION) {
setLabel("Try using the window decorations "
+ "to close the non-auto-closing dialog. "
+ "You can't!");
}
そのコードを使用すると、ユーザーが閉じるボタンではなく、使用可能なオプションのいずれかをクリックした場合にのみウィンドウを閉じることができるように、コメント セクションを簡単に調整できます。
でこれを行う方法があるかどうかはわかりませんJOptionPane
。
通常、JOptionPane が提供するよりも柔軟性が必要な場合 (基本的には、いくつかのダイアログ用の静的ファクトリの集まりです)、 を使用して独自のダイアログを記述しますJDialog
。
JDialog は継承されたメソッドを提供しており、これにより完全setUndecorated
に削除されます。X手間はかかりますが、ダイアログを好きなように見せることができます。