Java 在JOptionPane.showInputDialog()中区分无输入(空字符串)和取消按钮?

Java 在JOptionPane.showInputDialog()中区分无输入(空字符串)和取消按钮?,java,swing,joptionpane,propertychangelistener,Java,Swing,Joptionpane,Propertychangelistener,我正在使用输入对话框进行用户输入。输入可以是字符串值,也可以只按“OK”使用默认值。这样,就无法区分用户指定默认值(无字符串输入,“确定”按钮按下)和用户取消(“取消”按钮按下)。两者都返回空字符串 看起来我可以在InputDialog上注册PropertyChangeListener,但这需要(显然)直接构造InputDialog,然后添加到JDialog,等等(JOptionPane现在在后台为我做的所有事情都很好) 问题:是否有其他方法来区分具有空值的“OK”和“Cancel”,而无需自己

我正在使用输入对话框进行用户输入。输入可以是字符串值,也可以只按“OK”使用默认值。这样,就无法区分用户指定默认值(无字符串输入,“确定”按钮按下)和用户取消(“取消”按钮按下)。两者都返回空字符串

看起来我可以在InputDialog上注册PropertyChangeListener,但这需要(显然)直接构造InputDialog,然后添加到JDialog,等等(JOptionPane现在在后台为我做的所有事情都很好)

问题:是否有其他方法来区分具有空值的“OK”和“Cancel”,而无需自己构建InputDialog并添加PropertyChangeListener?

您可以使用
作为
initialSelectionValue
参数来区分OK和Cancel:

String s = JOptionPane.showInputDialog(parent, "Enter a value", "");

如果用户单击“取消”,则s为空;如果用户单击“确定”但未输入值,则s为

均返回空字符串。
-在Windows上,我按“确定”时得到空字符串,按“取消”时得到空字符串。我是否设置初始值无关紧要。请发布您的帖子,以演示问题。@camickr在构造最小SSCCE时删除所有依赖项(我错误地认为对于这样一个简单的问题,这是不必要的)我发现我使用的一个包掩盖了空Sting和空Sting之间的差异。因此,区分很容易(只要我不使用有问题的包)。感谢您的测试用例确实让我遇到了实际问题。+1
在构造最小SSCCE时删除了所有依赖项(我错误地认为这对于这样一个简单的问题是不必要的)
-在问题解决之前,我们不知道什么是相关的或不相关的,这就是为什么我总是建议创建SSCCE:)即使我没有设置初始值,我也会得到一个空字符串,只需按“确定”。@camickr我在1.8.0_45-b15上测试了这个。您是否使用了相同版本的
showInputDialog
?我说我使用了两个版本的showInputDialog,一个有初始值,一个没有。在这两种情况下都返回了一个空字符串。换句话说,我无法复制我吃了这个问题,因为当我点击Ok时,我从来没有得到“null”。所以我质疑OP的问题陈述。