Java 在维护键盘快捷键的同时更改JOptionPane.YES\u NO\u选项的默认值?

Java 在维护键盘快捷键的同时更改JOptionPane.YES\u NO\u选项的默认值?,java,swing,focus,joptionpane,Java,Swing,Focus,Joptionpane,是否有人有过创建JOptionPane的经验,例如YES\u NO\u选项对话框,并在维护键盘快捷键的同时将默认值更改为“NO”?我使用了一个对象数组来填充{“YES”,“NO”}的选项,然后在作业窗格中填充。showOptionDialog我在这些选项中传递的参数。这可以更改按钮的焦点,但会删除按钮的键盘快捷键。在改变焦点的同时,是否还可以保持键盘快捷键?这不是一个如何默认为“否”的问题,而是如何维护键盘快捷键的问题。“如何使JOptionPane.showConfirmDialog在默认情况

是否有人有过创建
JOptionPane
的经验,例如
YES\u NO\u选项
对话框,并在维护键盘快捷键的同时将默认值更改为“NO”?我使用了一个对象数组来填充
{“YES”,“NO”}
的选项,然后在
作业窗格中填充。showOptionDialog
我在这些选项中传递的参数。这可以更改按钮的焦点,但会删除按钮的键盘快捷键。在改变焦点的同时,是否还可以保持键盘快捷键?这不是一个如何默认为“否”的问题,而是如何维护键盘快捷键的问题。“如何使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]);

没有直接的方法可以做到这一点。 我的建议是创建自己的对话。 如果您不喜欢该解决方案,可以尝试提供JButton数组而不是字符串数组作为选项。这些按钮应该由您自己用助记符构建,以启用快捷方式

无论如何,这个按钮构造逻辑存在于
BasicOptionPaneUI.getButtons
方法中。在
BasicOptionPaneUI.createbuttonarea
中详细介绍这一点及其用法。那么你可能会有更好的方法来做这件事

我认为没有任何“简单”的方法可以做到这一点。相反,您可能需要提供自己的按钮

因此,基于和,您可以提供自己的
JButton
s预配置方式,例如

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;
    }

}

可能重复的我可以看到你怎么认为这是重复的,但是我的问题特别是指键盘快捷键,而不是默认焦点。我已经看到你发布的问题可能是重复的,尽管人们提到改变焦点会消除键盘快捷键,但似乎没有人有解决办法。谢谢@Omore你想在JOptionPane中只画“否”按钮吗?