当前位置: 首页 > 知识库问答 >
问题:

JavaFX-从其他组合框中删除选定的项目

尉迟晔
2023-03-14

我目前正在创建一个工具来为不同的事件提交报告。

在第一步中,用户选择通话中的每个人(我们有一个26人的团队)。在下一步中,将每个选定的人写入6个不同的组合框中,以便用户可以选择每辆车的驾驶员和指挥官(3辆车-每辆车上的指挥官和驾驶员,因此有6个组合框)。

我的问题是:我需要防止在每辆车上都选择同一个人作为驾驶员,或者同时作为驾驶员和指挥官。因此,我尝试通过ChangeListener从其他组合框中删除所选人员:

(每个组合框一个ChangeListener,这里有一个例子)

inputDriverTruck42.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {
        @Override
        public void changed(ObservableValue ov, Object t, Object t1) {
            String toRemove = inputDriverTruck42.getSelectionModel().getSelectedItem();
            inputDriverCar19.getItems().remove(toRemove);
            inputDriverTruck33.getItems().remove(toRemove);
            inputCommanderCar19.getItems().remove(toRemove);
            inputCommanderTruck42.getItems().remove(toRemove);
            inputCommanderTruck33.getItems().remove(toRemove);
        }

});

到目前为止效果不错,但当用户更改第一个组合框的选择时,之前删除的项目显然会消失在其他组合框中。此外,如果用户一个接一个地选择第一个组合框中的每个人,那么每隔一段时间,其他组合框就会变空。

因此,我需要根据每个组合框的选定项目重新填充框,而不会丢失当前选定的项目或将选定的项目重新添加回列表中。

感谢您的帮助!提前谢谢。

共有2个答案

公西飞鸾
2023-03-14

您使用的是哪个JDK版本?您检查了最新的JDK吗?我建议您在JDK 8u151、JDK 9上检查您的问题。

郝承悦
2023-03-14

是的,当您在初始组合框中选择新项目时,您可以将删除的项目重新添加回列表中,从列表中删除它。

从其他列表中删除的项目实际上是当前在第一个组合框中选择的项目。当您在同一组合框中选择其他值时,以前选择的值将保存在oldValue变量中(在您的情况下,它是公共void changed(observevalue ov,Object t,Object t1)中的对象t)。

当点击组合框的更改事件时,首先从其他组合框中删除一个新选择的项目,检查之前选择的项目是否在这些组合框中,如果不在,则将其添加到那里。

例子:

        @Override
    public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue)
    {
        List<ComboBox<String>> groupedComboBoxes = comboBoxesMap.get(this.comboBoxGroupName);

        groupedComboBoxes.stream().filter(comboBox -> !comboBox.equals(this.currentComboBox)).forEach(comboBox ->
        {
            comboBox.getItems().remove(newValue);

            if (oldValue != null && !comboBox.getItems().contains(oldValue))
                comboBox.getItems().add(oldValue);
        });
    }

其中,groupedcombobox是一个分组组合框列表,我们将在其中删除/添加项目。currentComboBox是一个点击更改事件信号的组合框。

因此,对于所有其他组合框,我删除了选定的值,检查这是项目的第一个选择(oldValue!=null)还是我正在重新选择。如果是第一个选择,则什么都不做,因此只会在其他组合框中进行删除。如果不是,则检查之前的项目是否真的已从其他组合框中删除,如果是这种情况,请重新将其添加回来。

这种方法的一个缺点是,如果您要在其中重新添加项目的组合框中的列表最初已排序,那么它们将变为未排序。但这已经是另一个故事了。。。

 类似资料:
  • 我有两个组合框。我正在填充这样的两个组合框。组合框1和2的名称是cmbpartyName和cmbprefPT2。 在这里,我从combox1中选择一个值,在它所选的索引更改事件中,如下所示。 由于两个组合框具有相同的值,如何从第二个组合框cmbPrefPT2中删除第一个组合框的选定值?

  • 问题内容: 如何从选择框中删除项目或向其中添加项目?我正在运行jQuery,这应该使任务更轻松。下面是一个示例选择框。 问题答案: 删除一个选项: 添加一个选项:

  • 我有一个带有2个ComboBox的应用程序,我想将用户的选择返回到一个变量中。我该怎么做?这是我的控制器类: 我需要使用这个变量来改变应用程序的工作方式。在“methode”组合框中,我想要一个包含大量文本字段的新窗口。例如,如果用户选择3,它将打开一个包含3个文本字段的新窗口,或者(如果可能,只需在组合框下方添加3个测试字段)谢谢

  • 我有一个奇怪的问题。我在JavaFX中使用了一个ComboBox,其中每一项都是一个HBox,是一个图像和一个标签的组合。 是字符串的数组列表。只是一个

  • 当用户点击按钮时,我试图从JList中删除选中的项目。 目前我有这样的东西: 当我单击按钮删除项目时,出现以下错误: 如何修复此错误,以及我的代码是否删除了多个项目?

  • 我已经实现了,这样我的船舶列表就会根据国家和船舶类型进行更改,但问题是我无法选择任何船舶。 你知道我哪里出了问题吗? 上面是Controller类中的。 上面是视图类中的setter。