JDialog的取消按钮(JDialog cancel button)

2019-09-24 00:03发布

我怎么能在一个秋千取消按钮JDialog ,即按钮其作用,如果用户按下键盘上的“取消”键是自动进行的?

相对应的是可供通过默认操作setDefaultButton对话框的根窗格的方法。

如果是帮助,我在寻找一个模拟到的WinForms Form.CancelButton财产。

Answer 1:

我不认为这是可能的的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]);


Answer 2:

我能看到的最好的办法就是添加一个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();
    }
});


Answer 3:

单线解决方案

t.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
   .put(KeyStroke.getKeyStroke("ESCAPE"), btnCancel.getAction());

其中,t是在该对话框中的任何组件(除了JButton的)等的JTextField。



Answer 4:

所有你需要做的就是附加动作监听按钮,并调用dialog.setVisible(false)在它的内部。



文章来源: JDialog cancel button
标签: java swing hig