在保持键盘快捷键的同时更改 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" 的问题,而是如何维护键盘快捷键的问题。 "How to make JOptionPane.showConfirmDialog have No selected by default?"这个问题问的是焦点,从来没有人回答过如何维护键盘快捷键。这是代码片段...
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 数组而不是 String 数组作为选项。这些按钮应该自己用助记符构造以启用快捷方式。
无论如何,这个按钮构造逻辑在 BasicOptionPaneUI.getButtons
方法中。在 BasicOptionPaneUI.creatButtonArea
中查看它及其用法。那么你可能会得到一个更好的方法来做到这一点
我认为没有任何 "easy" 方法可以做到这一点。相反,您可能必须提供自己的按钮。
因此,在 JOptionPane Passing Custom Buttons and Disable ok button on JOptionPane.dialog until user gives an input 的基础上,您可以提供自己的 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;
}
}
有没有人有过创建 JOptionPane
(例如 YES_NO_OPTION
对话框并将默认值更改为 "NO" 同时保持键盘快捷键的经验?我使用了一个对象数组来填充 {"YES", "NO"}
的选项,然后在 JOptionPane.showOptionDialog
参数中我传入了这些选项。这可以改变按钮的焦点,但会删除按钮的键盘快捷键。有没有办法在改变焦点的同时保持键盘快捷键?这不是如何默认为 "NO" 的问题,而是如何维护键盘快捷键的问题。 "How to make JOptionPane.showConfirmDialog have No selected by default?"这个问题问的是焦点,从来没有人回答过如何维护键盘快捷键。这是代码片段...
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 数组而不是 String 数组作为选项。这些按钮应该自己用助记符构造以启用快捷方式。
无论如何,这个按钮构造逻辑在 BasicOptionPaneUI.getButtons
方法中。在 BasicOptionPaneUI.creatButtonArea
中查看它及其用法。那么你可能会得到一个更好的方法来做到这一点
我认为没有任何 "easy" 方法可以做到这一点。相反,您可能必须提供自己的按钮。
因此,在 JOptionPane Passing Custom Buttons and Disable ok button on JOptionPane.dialog until user gives an input 的基础上,您可以提供自己的 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;
}
}