是否有人有创建JOptionPane
的经验,例如YES_NO_OPTION
对话框,并将默认值更改为"否"在保持键盘快捷键的同时?我使用了一组对象来填充{"YES", "NO"}
的选项,然后使用我在这些选项中传递的JOptionPane.showOptionDialog
参数。这可用于更改按钮的焦点,但会删除按钮的键盘快捷键。无论如何还要保持键盘快捷键同时改变焦点?这不是一个如何默认为" NO"而是如何维护键盘快捷键。问题"如何使JOptionPane.showConfirmDialog默认选择No?"询问焦点,没有人回答如何维护键盘快捷键。这是代码的片段......
Object[] options = {"YES", "NO"};
int choice = JOptionPane.showOptionDialog(null, "Please choose yes/no", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[1]);
答案 0 :(得分:1)
我认为没有任何" easy"这样做的方式。相反,您可能需要提供自己的按钮。
因此,基于JOptionPane Passing Custom Buttons和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;
}
}
答案 1 :(得分:0)
没有直接的方法来做到这一点。 我的建议是创建自己的对话框。 如果您不喜欢该解决方案,可以尝试提供JButton数组而不是String数组作为选项。这些按钮应由您自己的助记符构成,以启用快捷方式。
无论如何,这个按钮构造逻辑在BasicOptionPaneUI.getButtons
方法中。在BasicOptionPaneUI.creatButtonArea
中查看此内容及其用法。那么你可能会有更好的方法来做到这一点