Java 如何检查可编辑组合框中的选定项是否为空

Java 如何检查可编辑组合框中的选定项是否为空,java,string,swing,combobox,null,Java,String,Swing,Combobox,Null,我有一个可编辑的组合框,用户可以在其中选择一个数据库或键入一个新数据库的名称,然后按Enter或按钮Create来创建它 我发现,可编辑组合框有一个奇怪的行为,如果说组合框中选择了如下内容: if (jDatabaseComboBox.getSelectedItem() == null || jDatabaseComboBox.getSelectedItem().toString().isEmpty()) { return; } 然后用户将其删除,如下所示: if (j

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

我发现,
可编辑组合框
有一个奇怪的行为,如果说组合框中选择了如下内容:

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

然后用户将其删除,如下所示:

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

并按下
输入键
创建
按钮,则此代码不足以检查
组合框中是否没有选定的项目

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();
    }      
删除按钮

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
,因为我有它,所以如果
组合框
为空,则它们将变灰。

更好的方法:

comboBox.getSelectedIndex()
如果值为空或null或无效(匹配)值,则返回-1。

在这里找到示例代码


--编辑--

单击“删除”按钮

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

给你的支票加上装饰

 jDatabaseComboBox.getSelectedItem().toString().trim().isEmpty() 
只检查是否有空格作为输入。还可以尝试使用apache语言的StringUtils。您可以用一行替换整行

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

上一个选项有什么问题?你在想什么?你为什么说它便宜?@Braj我觉得我的最后一个选择很便宜,可能会引起意想不到的bug。更像是我在问它是否会导致我没有解释的意外错误,以及是否有更好的方法。一个错误-您调用了
jDatabaseComboBox.getSelectedItem().toString().trim()
在检查null之前。@Braj如果我尝试将null值转换为字符串,会引发异常吗?如果所选项为null,则调用
null.toString()
将导致空指针异常。如果有人键入新的数据库名称并按下
Enter
键或
Create
按钮,则该异常不起作用,因为新名称不是组合框的项目,因此返回-1。此示例检查是否选择了有效值。它不用于接受新值,因为您要创建新的数据库名称。您的要求与此有所不同,但如果将来您希望验证静态可编辑组合框中的值,您仍然可以使用此方法。至少您可以在删除选项的情况下使用此条件。情况如何?如果选择了现有数据库名称,请单击“创建”按钮。在这种情况下,您也可以使用此条件。我将使用它作为删除按钮谢谢。关于
Create
按钮如果我已经有一个数据库,说“apples”,用户键入“apples”,然后按
Enter
Create
我不能让它对照组合框的值进行检查,因为数据库可能已经断开连接。在这种情况下,我需要直接与服务器检查数据库是否存在。