我怎么能在一个秋千取消按钮JDialog
,即按钮其作用,如果用户按下键盘上的“取消”键是自动进行的?
相对应的是可供通过默认操作setDefaultButton
对话框的根窗格的方法。
如果是帮助,我在寻找一个模拟到的WinForms Form.CancelButton
财产。
我怎么能在一个秋千取消按钮JDialog
,即按钮其作用,如果用户按下键盘上的“取消”键是自动进行的?
相对应的是可供通过默认操作setDefaultButton
对话框的根窗格的方法。
如果是帮助,我在寻找一个模拟到的WinForms Form.CancelButton
财产。
我不认为这是可能的的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]);
我能看到的最好的办法就是添加一个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(){ @Override public void actionPerformed(ActionEvent e) { onCancel(); } });
单线解决方案
t.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
.put(KeyStroke.getKeyStroke("ESCAPE"), btnCancel.getAction());
其中,t是在该对话框中的任何组件(除了JButton的)等的JTextField。
所有你需要做的就是附加动作监听按钮,并调用dialog.setVisible(false)
在它的内部。