【问题标题】:Changing Default of JOptionPane.YES_NO_OPTION while maintaining keyboard shortcuts?在保持键盘快捷键的同时更改 JOptionPane.YES_NO_OPTION 的默认值?
【发布时间】:2017-08-20 13:23:57
【问题描述】:

有没有人有创建JOptionPane(例如YES_NO_OPTION 对话框)并将默认设置更改为“NO”同时保持键盘快捷键的经验?我使用一组对象来填充{"YES", "NO"} 的选项,然后在JOptionPane.showOptionDialog 参数中传递这些选项。这适用于更改按钮的焦点,但会删除按钮的键盘快捷键。无论如何在改变焦点的同时保持键盘快捷键?这不是如何默认为“NO”的问题,而是如何维护键盘快捷键的问题。问题“如何使 JOptionPane.showConfirmDialog 默认没有选中?”正在询问焦点,没有人回答如何维护键盘快捷键。这是代码的sn-p...

Object[] options = {"YES", "NO"};
int choice = JOptionPane.showOptionDialog(null, "Please choose yes/no", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[1]);

【问题讨论】:

  • 我可以看出您认为这是重复的,但是我的问题专门针对键盘快捷键,而不是默认焦点。我已经看到您发布的问题可能重复,尽管人们提到改变焦点会消除键盘快捷键,但似乎没有人有解决方案。谢谢@Omore
  • 您只想在 JOptionPane 中绘制“NO”按钮?

标签: java swing focus joptionpane


【解决方案1】:

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

因此,基于JOptionPane Passing Custom ButtonsDisable ok button on JOptionPane.dialog until user gives an input,您可以提供自己的JButtons,并按照您想要的方式进行预配置,例如

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

}

【讨论】:

    【解决方案2】:

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

    无论如何,这个按钮构造逻辑在BasicOptionPaneUI.getButtons 方法中。在BasicOptionPaneUI.creatButtonArea 中查看此内容及其用法。那么你可能会得到更好的方法来做到这一点

    【讨论】:

      猜你喜欢
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      • 2018-07-13
      相关资源
      最近更新 更多