【问题标题】:How to check if a selected item from an editable Combobox is empty如何检查可编辑组合框中的选定项目是否为空
【发布时间】:2014-05-26 04:42:01
【问题描述】:

我有一个可编辑的ComboBox,用户可以在其中选择数据库或输入新数据库的名称,然后按Enter 或按钮Create 来创建它。

我发现Editable ComboBox 的一个奇怪行为,如果说在组合框中选择了这样的东西:

然后用户像这样删除它:

并按下Enter keyCreate按钮,则此代码不足以检查ComboBox中是否没有选中项:

if (jDatabaseComboBox.getSelectedItem() == null) {
    return;
}

所以我选择这样检查:

if (jDatabaseComboBox.getSelectedItem() == null
       || jDatabaseComboBox.getSelectedItem().toString().isEmpty()) {
    return;
}

我的问题是:我检查所选项目的方式便宜吗?还有更优雅的方式吗?


这是我最后的做法:

组合框和创建按钮

private void jDatabaseComboBoxActionPerformed(java.awt.event.ActionEvent evt)                                                  
    {                                                      
        final String selectedDatabaseName = jDatabaseComboBox.getSelectedItem().
                toString().trim();
        if (selectedDatabaseName.isEmpty()) {
            return;
        }

        if (databaseAlreadyExistsInServer(selectedDatabaseName)) {
            _currentDatabase = new SQLDatabase(selectedDatabaseName);
            updateTableComboBoxes();
        } else {
            createANewDatabase(selectedDatabaseName);
            updateDatabaseComboBoxes();
        }
        System.out.println();
    } 

删除按钮

private void jDeleteDatabaseButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                      
        final String selectedDatabaseName = jDatabaseComboBox.getSelectedItem().
                toString().trim();

        if (selectedDatabaseName.isEmpty()) {
            return;
        }

        if (!databaseAlreadyExistsInServer(selectedDatabaseName)) {
            return;
        }

        deleteDatabase(selectedDatabaseName);
        updateDatabaseComboBoxes();
        System.out.println();
    }      

我不再检查null,因为我有它,所以如果comboBoxes 为空,那么它们将变灰。

【问题讨论】:

  • 你最后一个选项有什么问题?你在想什么?为什么说便宜?
  • @Braj 在我看来,我的最后一个选择很便宜,并且可能会导致意想不到的错误。更像是我在问它是否会导致我没有考虑到的意外错误,以及是否有更好的方法。
  • 一个错误 - 你在检查 null 之前调用了jDatabaseComboBox.getSelectedItem().toString().trim()
  • @Braj 如果我尝试将空值转换为字符串,会引发异常吗?
  • 如果选中的项目为空,那么调用null.toString()将导致空指针异常。

标签: java string swing combobox null


【解决方案1】:

更好的方法:

comboBox.getSelectedIndex()

如果值为空、null 或无效(匹配)值,它将返回 -1。

在这里找到示例代码Editable ComboBox


--编辑--

删除按钮被点击

if (jDatabaseComboBox.getSelectedIndex() == -1) {
    System.out.println("Please select a database name.");
} else {
    System.out.println("database name is deleted successfully.");
}

【讨论】:

  • 如果有人键入一个新的数据库名称并按下Enter 键或Create 按钮,这将不起作用,因为新名称不是组合框的项目,因此它返回-1。
  • 此示例检查是否选择了有效值。它不是为了接受新值,因为您想创建一个新的数据库名称。您的要求与此有所不同,但如果将来您想验证静态可编辑组合框中的值,您仍然可以使用此方法。
  • 至少你可以在删除选项的情况下使用这个条件。
  • 情况如何?如果选择了现有数据库名称并单击创建按钮。在这种情况下,您也可以使用此条件。
  • 我会将它用于删除按钮,谢谢。关于Create 按钮,如果我有一个数据库已经说“苹果”并且用户键入“苹果”并按下EnterCreate 我不能让它检查组合框的值,因为有一个数据库可能已断开连接的可能性。在这种情况下,我可以直接与服务器检查数据库是否存在。
【解决方案2】:

为您的支票添加装饰

 jDatabaseComboBox.getSelectedItem().toString().trim().isEmpty() 

只检查空格作为输入。也尝试使用 apache 的 lang 的 StringUtils。你可以用一行替换整行

if(StringUtils.isEmpty(jDatabaseComboBox.getSelectedItem()))

http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html

【讨论】:

    猜你喜欢
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 2014-05-11
    • 2015-04-01
    • 2015-02-19
    • 1970-01-01
    相关资源
    最近更新 更多