我在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();
}
};
答案 0 :(得分:19)
这是我想到的第一件事。
//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]);
但可能有更好的方法。
答案 1 :(得分:16)
使用此构造函数:
JOptionPane(Object message, int messageType, int optionType,
Icon icon, Object[] options, Object initialValue)
其中options
指定按钮,并initialValue
(其中一个options
值)指定默认值。
更新:您可以致电showOptionDialog
而不是showConfirmDialog
。前者需要options
和initialValue
个参数。
答案 2 :(得分:6)
如果您不想硬编码“是”和“否”(例如,当您的应用已针对其他语言进行本地化时),您可以使用UIManager资源:
UIManager.getString("OptionPane.yesButtonText", l)
UIManager.getString("OptionPane.noButtonText", l)
答案 3 :(得分:6)
这是我的解决方案:
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<Object> options = new ArrayList<Object>();
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);
}
}
答案 4 :(得分:1)
对于上面的示例,它是JOptionPane.showOptionDialog
这些参数不能传递给showConfirmDialog
,因为它没有它们。
更多人可能正在寻找这个,所以为什么不提供“工作”解决方案。