gpt4 book ai didi

java - 如何在 JavaFX 中使用字符串从组合框中选择数据并将对象作为值?

转载 作者:行者123 更新时间:2023-12-02 09:30:20 24 4
gpt4 key购买 nike

我在 javafx 中有一个 ComboBox,它使用 Degree 对象作为其值。另一方面,我有一个以 Thesis 对象作为值的 TableView,它有一个监听器,当单击该行时,该监听器返回 DegreeName 的字符串。如何使用从表中检索到的“学位名称”作为从组合框中选择具有相同学位名称的值的方法?

我使用 Degree 对象作为 ComboBox 中的值,因为我想在程序中使用该值时检索该值的所有属性。

到目前为止,我已经使用以下代码生成了 ComboBox:

private void set_degreeCombo() throws SQLException
{
ObservableList<Degree> degreeList = DegreeDAO.init_degreeData();

thesisDegreeCB.setCellFactory(
(cb) -> new ListCell<Degree>(){
@Override
protected void updateItem(Degree item, boolean empty)
{
super.updateItem(item, empty);

if(item == null || empty)
setText(null);
else
setText(item.getDegree());
}
}
);

thesisDegreeCB.setConverter(
new StringConverter<Degree>() {
@Override
public String toString(Degree degree) {
return (degree == null) ? null : degree.getDegree();
}

@Override
public Degree fromString(String degreeString) {
return null;
}
}
);

thesisDegreeCB.setItems(degreeList);
thesisDegreeCB.getSelectionModel().select(0);
}

我的 TableView 中有一个监听器:

thesisIDCol.setCellValueFactory(data -> data.getValue().idProperty().asObject());
thesisTitleCol.setCellValueFactory(data -> data.getValue().titleProperty());
thesisYearCol.setCellValueFactory(data -> data.getValue().yearProperty());

thesisTbl.getSelectionModel().selectedItemProperty().addListener(
(observable, oldVal, newVal) ->
{
if(newVal != null)
{
if(newVal.getId() != 0)
{
thesis = newVal;
try {
generateThesisData();
} catch (SQLException e) {
e.printStackTrace();
}
} else {
System.out.println("Adding New Data.");
clearThesisData();
}
} else
clearThesisData();
}
);

我想要发生的是,当我调用generateThesisData()时,我想选择与我的表中的学位名称具有相同学位名称的组合框。

到目前为止我只使用这段代码:

thesisDegreeCB.getSelectionModel().select(thesis.getDegreeID() - 1);

并获取它的索引值,这是不可靠的,因为我可以选择从度表中删除数据。

我希望任何人都可以帮助我解决这个问题。非常感谢您,祝您有美好的一天。

最佳答案

如果Degree实现equals以产生 true 的方式当用于组合 TableView 中的数据时以及 ComboBox 中的一项,没有问题。只需传递要选择的项目即可。

(顺便说一句:使用 ComboBox.setValue 比使用选择模型更简洁。我更喜欢以这种方式设置值。)

thesisDegreeCB.setValue(theDegreeFromTableViewItem);

否则,您需要在组合框项目中找到匹配的项目(假设它们已经初始化):

thesisDegreeCB.setValue(thesisDegreeCB.getItems().stream()
.filter(degree -> theDegreeFromTableViewItem.getDegree().equals(degree.getDegree()))
.findFirst().orElse(null));

关于java - 如何在 JavaFX 中使用字符串从组合框中选择数据并将对象作为值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58037012/

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