![](/img/trans.png)
[英]Using Boolean True/False with JOptionPane.YES_NO_OPTION
[英]Changing Default of JOptionPane.YES_NO_OPTION while maintaining keyboard shortcuts?
是否有人在创建JOptionPane
例如YES_NO_OPTION
对话框)并将默认值更改为“ NO”的同时保持键盘快捷键方面有经验? 我使用了一个对象数组来填充{"YES", "NO"}
,然后在这些选项中传递的JOptionPane.showOptionDialog
参数中。 这可用于更改按钮的焦点,但是会删除按钮的键盘快捷键。 无论如何,在维护键盘快捷键的同时还要改变焦点? 这不是如何默认设置为“ NO”的问题,而是如何维护键盘快捷键的问题。 问题“如何使JOptionPane.showConfirmDialog默认没有选择?” 在询问焦点时,没有人回答如何维护键盘快捷键。 这是代码片段...
Object[] options = {"YES", "NO"};
int choice = JOptionPane.showOptionDialog(null, "Please choose yes/no", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[1]);
我认为没有任何“简单”的方法可以做到这一点。 相反,您可能必须提供自己的按钮。
因此,基于JOptionPane通过JOptionPane.dialog上的“传递自定义按钮”和“ 禁用ok”按钮,直到用户提供输入为止,例如 ,您可以提供自己的JButton
以所需的方式进行预配置
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
public class Test {
public static void main(String[] args) {
JButton btnYes = new JButton("Yes");
btnYes.setMnemonic('s');
btnYes.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane pane = getOptionPane((JComponent)e.getSource());
pane.setValue(JOptionPane.YES_OPTION);
}
});
JButton btnNo = new JButton("No");
btnNo.setMnemonic('o');
btnNo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane pane = getOptionPane((JComponent)e.getSource());
pane.setValue(JOptionPane.NO_OPTION);
}
});
JButton[] options = new JButton[] {btnYes, btnNo};
JOptionPane.showOptionDialog(
null,
"Help",
"More",
JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE,
null, options, btnYes);
}
protected static JOptionPane getOptionPane(JComponent parent) {
JOptionPane pane = null;
if (!(parent instanceof JOptionPane)) {
pane = getOptionPane((JComponent)parent.getParent());
} else {
pane = (JOptionPane) parent;
}
return pane;
}
}
没有直接的方法可以做到这一点。 我的建议是创建自己的对话框。 如果您不喜欢该解决方案,可以尝试通过提供JButton数组而不是String数组作为选项。 这些按钮应该由您自己使用助记符来构造,以启用快捷方式。
无论如何, BasicOptionPaneUI.getButtons
方法中存在此按钮构造逻辑。 在BasicOptionPaneUI.creatButtonArea
中详细BasicOptionPaneUI.creatButtonArea
它及其用法。 那么您可能会获得更好的方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.