gpt4 book ai didi

JavaFx:根据另一个组合框使用不同的枚举填充组合框

转载 作者:行者123 更新时间:2023-12-02 11:29:19 25 4
gpt4 key购买 nike

我有两个组合框:

    final ComboBox<MainCategory> comboBoxMainCategory = new ComboBox<>();
final ComboBox<SubCategory> comboBoxSubCategory = new ComboBox<>();

根据在comboBoxMainCategory中选择的值,应使用相应的枚举填充comboBoxSubCategory。

    public enum MainCategory { // extra enum class
EUROPE("Europe"),
USA("USA");
}

public enum SubCategoryEurope { // extra enum class
GERMANY("Germany"),
FRANCE("France");
}

public enum SubCategoryUSA {
COLORADO("Colorado"),
CALIFORNIA("California");
}

如果为comboBoxMainCategory 选择“欧洲”,则应使用SubCategoryEurope 填充comboBoxSubCategory。如果“美国”,则带有子类别美国。

你是如何实现这一目标的?

这是我的代码:

    final ComboBox<MainCategory> comboBoxMainCategory = new ComboBox<();
final ComboBox<SubCategory> comboBoxSubCategory = new ComboBox<>();

comboBoxMainCategory.valueProperty().addListener((obs, oldValue,
newValue) ->
{
if (newValue == null) { // newValue: Europe || USA
comboBoxSubCategory.getItems().clear();
comboBoxSubCategory.setDisable(true);
} else if (newValue.equals(MainCategory.EUROPE)) {

comboBoxSubCategory.setItems(FXCollections.observableArrayList(SubCategoryEurope.values()));
comboBoxSubCategory.setDisable(false);
} else {
comboBoxSubCategory.setItems(FXCollections.observableArrayList(SubCategoryUSA.values()));
comboBoxSubCategory.setDisable(false);}
});

问题是,因为comboBoxSubCategory是“SubCategory”,所以如果用“SubCategoryEurope”或“SubCategoryUSA”填充,则会出现类型错误。

解决这个问题的最佳方法是什么?抱歉,如果这是一个愚蠢的问题,我是 JavaFx 的新手。

非常感谢!

最佳答案

我根本不会使用枚举,因为这不允许在不重新编译的情况下进行数据操作。如果您坚持使用枚举,则需要使用 Object或使用两个子类别枚举类型作为 comboBoxSubCategory 的参数类型实现的接口(interface):

comboBoxMainCategory.valueProperty().addListener((obs, oldValue, newValue) -> {
if (newValue == null) { // newValue: Europe || USA
comboBoxSubCategory.getItems().clear();
comboBoxSubCategory.setDisable(true);
} else {
comboBoxSubCategory.setDisable(false);
List<? extends Object> list;
switch (newValue) {
case EUROPE:
list = Arrays.asList(SubCategoryEurope.values());
break;
default:
list = Arrays.asList(SubCategoryUSA.values());
break;
}
comboBoxSubCategory.getItems().setAll(list);
}
});
<小时/>

更好的方法是使用 Map<String, List<String>>存储数据:

Map<String, List<String>> data = new HashMap<>();
data.put("EUROPE", Arrays.asList("GERMANY", "FRANCE"));
data.put("USA", Arrays.asList("COLORADO", "CALIFORNIA"));

comboBoxMainCategory.valueProperty().addListener((obs, oldValue, newValue) -> {
List<String> list = data.get(newValue);
if (list != null) {
comboBoxSubCategory.setDisable(false);
comboBoxSubCategory.getItems().setAll(list);
} else {
comboBoxSubCategory.getItems().clear();
comboBoxSubCategory.setDisable(true);
}
});

关于JavaFx:根据另一个组合框使用不同的枚举填充组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49388232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com