Swing JDialog
のキャンセルボタン、つまりユーザーがキーボードの「キャンセル」キーを押したときに自動的に実行されるボタンを設定するにはどうすればよいですか?JDialogキャンセルボタン
ダイアログボックスのルートウィンドウのsetDefaultButton
メソッドを使用して、対応するアクションがデフォルトアクションとして提供されます。
私がWinFormsのForm.CancelButton
プロパティのアナログを探しています。
Swing JDialog
のキャンセルボタン、つまりユーザーがキーボードの「キャンセル」キーを押したときに自動的に実行されるボタンを設定するにはどうすればよいですか?JDialogキャンセルボタン
ダイアログボックスのルートウィンドウのsetDefaultButton
メソッドを使用して、対応するアクションがデフォルトアクションとして提供されます。
私がWinFormsのForm.CancelButton
プロパティのアナログを探しています。
これを拡張せずにJDialogで実行することはできません。
JOptionPane.showOptionDialog()(または他のshowメソッドの1つ)を使用して、使用するJButtonを渡すことができます。
int optionType = JOptionPane.DEFAULT_OPTION;
int messageType = JOptionPane.PLAIN_MESSAGE; // no standard icon
JButton ok = new JButton("ok");
JButton cancel = new JButton("cancel");
//add any handlers to the buttons
...
//construct options
Object[] selValues = { ok, cancel };
//show dialog as normal, selected index will be returned.
int res = JOptionPane.showOptionDialog(null, "message",
"title", optionType, messageType, null, selValues,
selValues[0]);
こんにちは、リッチ、例のおかげで。残念ながら、個別化されたオプションダイアログだけでなく、さまざまなコントロールを備えた完全にカスタマイズされたダイアログが必要です。私が見るところでは、完全にカスタマイズされたパネルを渡すことができるメソッド/オーバーロードはありません。 –
私はあなたが正しいと思います。カスタムダイアログがあれば、自分で処理を実装する必要がありますが、JOptionPaneから処理を取り除くことができます。 SWTのFWIWでは、Dialogの任意のサブクラスを定義し、それを表示するopen()メソッドを呼び出すことができます –
シングルラインソリューションtは任意のコンポーネント(ある
t.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
.put(KeyStroke.getKeyStroke("ESCAPE"), btnCancel.getAction());
:あなたはこのような何かを行うことができますので
渡されたオプションは、コンポーネントである場合、それらは、通常のようにレンダリングされますダイアログ内のJTextFieldのようなJButtonを除く)。
'put()'メソッドの第2引数はアクションマップのキーであり、 'アクション'ではありません。これは、 'btnCancel.getAction()!= null'と、' btnCancel.getAction() 'によって返された' Action'が 't'のアクションマップにキーとして登録されている場合、 't.getActionMap()。put(btnCancel.getAction()、btnCancel.getAction())'が既に呼び出されていた場合。 – Jesse
ボタンにアクションリスナーを添付して、dialog.setVisible(false)
を呼び出してください。
ちょうど試してみてください...実際に動作します –
あなたは質問に答えません。キーストローク、一般的にはエスケープキーを使ってダイアログを閉じようとしていました。少なくともそれはどのように私が質問を読んでいるかです。それはそれを再読する際に少し曖昧です。 – PhiLho
おっと、それを指摘してくれてありがとう。質問は "ボタン"ではなく "キャンセル"キーを読むべきです。私はそれを修正します。 –
私が見ることができる最も良い方法は、ルートペインのアクションマップにAction
を追加し、ルートペインの入力マップを使用してそのアクションをエスケープキーにリンクすることです。
これには、Action
が必要です。 (。すなわちcancelButton.getAction() != null
)あなたのキャンセルボタンの動作はアクションとして実装されている場合、これは動作します:
getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "CANCEL"); getRootPane().getActionMap().put("CANCEL", cancelButton.getAction());
をそうでない場合は、キャンセルボタンのロジックがActionListener
経由で実装されている場合、あなたはActionListener
のactionPerformed()
方法を持つことができますロジックを実装するprivate void onCancel()
メソッドを呼び出し、同じメソッドを呼び出す「キャンセル」アクションを登録します。
getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "CANCEL"); getRootPane().getActionMap().put("CANCEL", new AbstractAction(){ @Override public void actionPerformed(ActionEvent e) { onCancel(); } });
エスケープキーを意味すると思います。 – NateS