【问题标题】:Differentiating between no input (null String) and Cancel button in JOptionPane.showInputDialog()?区分 JOptionPane.showInputDialog() 中的无输入(空字符串)和取消按钮?
【发布时间】:2015-11-23 16:58:00
【问题描述】:

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

看起来我可以在 InputDialog 上注册一个 PropertyChangeListener,但这需要(显然)直接构造 InputDialog,然后添加到 JDialog 等(JOptionPane 现在在后台对我来说都很好。

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

【问题讨论】:

  • Both return a null String. - 在 Windows 上,当我按下 OK 时我得到一个空字符串,当我按下“Cancel”时我得到一个空字符串。我是否设置初始值都没有关系。发布您的 SSCCE 来证明问题。
  • @camickr 在构建最小 SSCCE 时删除所有依赖项(我错误地认为对于这样一个简单的问题没有必要),我发现我正在使用的一个包掩盖了 null 和空 Sting 之间的区别。因此,区分很容易(只要我不使用有问题的包)。您的测试用例确实使我遇到了实际问题,谢谢。 +1
  • when constructing the minimal SSCCE removing all dependencies (which I mistakenly thought was unnecessary for such a simple question) - 在问题解决之前,我们不知道什么是相关的或不相关的,这就是为什么我总是建议创建一个 SSCCE :)

标签: java swing joptionpane propertychangelistener


【解决方案1】:

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

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

如果用户点击了Cancel,s为null,如果用户点击OK,没有输入值,则为""

【讨论】:

  • 我得到一个空字符串,即使我没有设置初始值并按 OK。
  • @camickr 我在 1.8.0_45-b15 上对此进行了测试。你用的是同一个版本的showInputDialog吗?
  • 我是说我使用了两个版本的 showInputDialog,一个有初始值,一个没有。在这两种情况下,都返回了一个空字符串。换句话说,我无法复制该问题,因为当我单击“确定”时,我从未得到“null”。所以我质疑OP的问题陈述。
猜你喜欢
  • 2020-01-31
  • 1970-01-01
  • 2012-02-29
  • 2023-03-12
  • 2019-08-22
  • 1970-01-01
  • 2023-01-30
  • 2023-04-10
  • 2015-07-02
相关资源
最近更新 更多