【发布时间】:2020-04-01 10:14:47
【问题描述】:
我想知道如何更改 javafxml 组合框的 selectionmodel 以便它可以允许多个选择。我尝试在下拉菜单中创建一个带有 CheckBoxes 的 JavaFX ComboBox。我的代码:
public void alLStatus() throws SQLException {
allStatus.clear();
cb_statuItem.getItems().clear();
DbManager test = new DbManager();
String sql = "SELECT allStatus FROM Items ;";
Statement stmt = test.connect().createStatement();
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
Items a = new Items();
a.setStatusItems(rs.getString("statusItems"));
allStatus.add(a);
}
test.disconnect();
cb_statuItem.setItems(allStatus);
cb_statuItem.setConverter(new StringConverter<Items>() {
@Override
public String toString(Items object) {
// //System.out.print("converting object: ");
if (object == null) {
// //System.out.println("null");
return "[none]";
}
// //System.out.println(object.toString());
return object.getStatusItems();
}
@Override
public Items fromString(String string) {
throw new RuntimeException("not required for non editable ComboBox");
}
});
cb_statuItem.setCellFactory(new Callback<ListView<Items>, ListCell<Items>>() {
@Override
public ListCell<Items> call(ListView<Items> param) {
return new ListCell<Items>() {
private CheckBox cb = new CheckBox();
private BooleanProperty booleanProperty;
{
cb.setOnAction(e->getListView().getSelectionModel().select(getItem()));
}
@Override
protected void updateItem(Items item, boolean empty) {
super.updateItem(item, empty);
if (!empty) {
booleanProperty = item.selectedProperty();
cb.selectedProperty().bindBidirectional(booleanProperty);
setGraphic(cb);
setText(item.getStatusItems() + "");
} else {
setGraphic(null);
setText(null);
}
}
};
}
});
}
ComboBox 显示类似项目状态的文本,但不允许单击复选框,它会自动关闭。 我想从组合框中检查更多项目并将它们放入列表中。 BooleanProperty 总是返回 false。
任何贡献将不胜感激。
【问题讨论】:
-
您确实注意到您可能会在项目之间创建绑定,因为可以将多个项目一个接一个地添加到同一个单元格中,特别是如果有足够的项目可以显示滚动条?还有为什么要实现things that are already available?