如何在 Swing 中设置取消按钮JDialog
,即如果用户按下键盘上的“取消”键,该按钮的操作会自动执行?
setDefaultButton
通过对话框的根窗格的方法为默认操作提供对应项。
如果这有帮助,我正在寻找 WinFormsForm.CancelButton
属性的类似物。
我能看到的最好的方法是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
,您可以让调用方法的actionPerformed()
方法实现该逻辑,并注册一个调用相同方法的“取消”操作。ActionListener
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(){ @覆盖 公共无效actionPerformed(ActionEvent e) { onCancel(); } });
单线解决方案
t.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
.put(KeyStroke.getKeyStroke("ESCAPE"), btnCancel.getAction());
其中 t 是对话框中的任何组件(JButton 除外),例如 JTextField。
我认为如果不扩展它,JDialog 是不可能的。
您可以使用 JOptionPane.showOptionDialog() (或者可能是其他显示方法之一),传递您想要使用的 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]);
您所要做的就是将动作侦听器附加到按钮并dialog.setVisible(false)
在其中调用。