如何使JOptionPane.showConfirmDialog默认没有选中?

我在Java中实现了一个“另存为”对话框,提示用户文件是否已存在,并且我希望默认情况下选择“否”选项。 我该怎么做呢?

这是我目前的代码:

JFileChooser chooser = new JFileChooser() { public void approveSelection() { File selectedFile = getSelectedFile(); if (selectedFile != null && selectedFile.exists( ) ) { int response = JOptionPane.showConfirmDialog( this, "The file " + selectedFile.getName() + " already exists." + " Do you want to replace the existing file?", getDialogTitle(), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); if (response != JOptionPane.YES_OPTION ) { return; } } super.approveSelection(); } }; 

使用此构造函数:

 JOptionPane(Object message, int messageType, int optionType, Icon icon, Object[] options, Object initialValue) 

其中options指定按钮,并使用initialValue (其中一个options值)指定默认值。

更新:您可以调用showOptionDialog而不是showConfirmDialog 。 前者采用optionsinitialValue参数。

这是我想到的第一件事。

 //Custom button text Object[] options = {"Yes", "No"}; JOptionPane.showOptionDialog(this, "The file " + selectedFile.getName() + " already exists. Do you want to replace the existing file?", getDialogTitle(), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[1]); 

但可能有更好的方法。

如果您不想硬编码“是”和“否”(例如,当您的应用程序本地化为其他语言时),您可以使用UIManager资源:

 UIManager.getString("OptionPane.yesButtonText", l) UIManager.getString("OptionPane.noButtonText", l) 

这是我的解决方案:

 import java.awt.Component; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.UIManager; public class NegativeDefaultButtonJOptionPane { public static int showConfirmDialog(Component parentComponent, Object message, String title, int optionType) { List options = new ArrayList(); Object defaultOption; switch(optionType){ case JOptionPane.OK_CANCEL_OPTION: options.add(UIManager.getString("OptionPane.okButtonText")); options.add(UIManager.getString("OptionPane.cancelButtonText")); defaultOption = UIManager.getString("OptionPane.cancelButtonText"); break; case JOptionPane.YES_NO_OPTION: options.add(UIManager.getString("OptionPane.yesButtonText")); options.add(UIManager.getString("OptionPane.noButtonText")); defaultOption = UIManager.getString("OptionPane.noButtonText"); break; case JOptionPane.YES_NO_CANCEL_OPTION: options.add(UIManager.getString("OptionPane.yesButtonText")); options.add(UIManager.getString("OptionPane.noButtonText")); options.add(UIManager.getString("OptionPane.cancelButtonText")); defaultOption = UIManager.getString("OptionPane.cancelButtonText"); break; default: throw new IllegalArgumentException("Unknown optionType "+optionType); } return JOptionPane.showOptionDialog(parentComponent, message, title, optionType, JOptionPane.QUESTION_MESSAGE, null, options.toArray(), defaultOption); } } 

对于上面的示例,它是JOptionPane.showOptionDialog这些参数不能传递给showConfirmDialog因为它没有它们。

更多的人可能正在寻找这个,所以为什么不提供“工作”的解决方案。