组合框依赖于另一个组合框 - JavaFX

Posted

技术标签:

【中文标题】组合框依赖于另一个组合框 - JavaFX【英文标题】:combobox dependent on another combobox - JavaFX 【发布时间】:2017-02-19 07:52:33 【问题描述】:

我有三个组合框:国家、州和城市

我怎样才能成为依赖他人的人?例如,如果我选择巴西,则会出现他们的州,然后是所选州的城市。但是如果我在该国选择美国会显示他们的州

我是用mysql做数据库的,如果你需要在数据库中做一些配置也告诉我……你是第一次使用它,非常感谢。

【问题讨论】:

Obs:我如何填充组合框的示例 public void country() listCountry = countryDAO.show(); observableListCountry = FXCollections.observableArrayList(listCountry); cbxCountry.setItems(observableList); 请不要在 cmets 中发布代码:edit 您的问题并添加到那里。 【参考方案1】:

向国家组合框注册一个监听器,并在所选项目发生变化时更新状态组合框:

cbxCountry.valueProperty().addListener((obs, oldValue, newValue) -> 
    if (newValue == null) 
        cbxState.getItems().clear();
        cbxState.setDisable(true);
     else 
        // sample code, adapt as needed:
        List<State> states = stateDAO.getStatesForCountry(newValue);
        cbxState.getItems().setAll(states);
        cbxState.setDisable(false);
    
);

如果您愿意,也可以使用绑定来执行此操作:

cbxState.itemsProperty().bind(Bindings.createObjectBinding(() -> 
    Country country = cbxCountry.getValue();
    if (country == null) 
        return FXCollections.observableArrayList();
     else 
        List<State> states = stateDAO.getStatesForCountry(country);
        return FXCollections.observableArrayList(states);
    
,
cbxCountry.valueProperty());

(如果您希望上述解决方案中的禁用功能也可以使用cbxState.disableProperty().bind(cbxCountry.valueProperty().isNull());)。

【讨论】:

以上是关于组合框依赖于另一个组合框 - JavaFX的主要内容,如果未能解决你的问题,请参考以下文章

想要一个列表框显示1-10,但是下拉中显示的内容依赖于另一个列表项

在 access 2007 中编辑组合框

单击时在JavaFX中填充组合框

JavaFX:使用对象属性的组合框

组合框占位符 NullPointerException JavaFX

JavaFX 自动完成组合框下拉大小