如何在Swing JDialog
中设置取消按钮,即,如果用户按下键盘上的“取消”键,则自动执行操作的按钮?JDialog取消按钮
通过对话框的根窗格的setDefaultButton
方法为对等方提供默认操作。
如果这有帮助,我正在寻找一个类似WinForms Form.CancelButton
属性。
如何在Swing JDialog
中设置取消按钮,即,如果用户按下键盘上的“取消”键,则自动执行操作的按钮?JDialog取消按钮
通过对话框的根窗格的setDefaultButton
方法为对等方提供默认操作。
如果这有帮助,我正在寻找一个类似WinForms Form.CancelButton
属性。
我不认为这是可能的JDialog没有扩展它。
您可以使用JOptionPane.showOptionDialog()(或可能是其他show方法之一),传递要使用的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]);
嗨富,谢谢你的例子。不幸的是,我需要一个完全定制的对话框,其中包含许多不同的控件,而不仅仅是个性化的选项对话框据我所知,没有方法/超载可以通过一个完全定制的面板。 – 2009-08-16 14:16:49
我认为你是对的,如果你有一个自定义的对话框,你将需要自己实现处理,但是可以从JOptionPane中剥离处理。在SWT中你可以定义一个任意的Dialog子类并调用它的open()方法来显示它 – 2009-08-16 14:23:45
单线解决方案
t.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
.put(KeyStroke.getKeyStroke("ESCAPE"), btnCancel.getAction());
其中T是任何组件(除了JButton)像对话框中的JTextField。
put()方法的第二个参数是动作映射的关键字,而不是Action。如果'btnCancel.getAction()!= null',以及如果'btnCancel.getAction()'返回的'Action'在't'的动作映射中以自身作为关键字注册,这只会起作用。如果't.getActionMap()。put(btnCancel.getAction(),btnCancel.getAction())'以前被调用过。 – Jesse 2012-03-05 15:32:57
您只需将动作侦听器附加到按钮上并在其中调用dialog.setVisible(false)
即可。
试试吧......它实际上可以工作 – 2009-08-17 01:55:53
你不回答这个问题。它正准备用按键解除对话,一般用Escape键。至少我是这样读取这个问题的,这在重读它时有点含糊不清。 – PhiLho 2009-08-17 05:43:03
哎呀,谢谢你指出。该问题应该是“取消”键,“不”按钮“。我会解决这个问题。 – 2009-08-17 06:58:11
我能看到的最佳方式是将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()
方法调用一个实现逻辑的方法,并注册一个调用相同方法的“取消”操作。
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 2012-06-02 02:38:34