首页 > 解决方案 > 无法以编程方式选择使用对象的 Javafx 组合框项目

问题描述

在使用类对象列表的 JavaFx ComboBox 中。我想使用 getSelectionModel().select(object or index) 以编程方式选择 ComboBox 中的项目。我没有得到想要的结果虽然设置了值,但它类似于 main.dao.Company.Company.CompanyTableData@74541e7b。代码有点像这样。

ComboBox<CompanyTableData> company = new ComboBox<>();
company.setItems(GetCompany.getCompanyTableData());//where Observable list is set..

GetCompany.getCompanyTableData() 返回 CompanyTableData 类的 observablelist。

组合框如下所示。

在此处输入图像描述

CompanyTableData 类为。

public class CompanyTableData {
private SimpleStringProperty itemCompanyId;
private SimpleStringProperty itemCompanyName;
private SimpleStringProperty createBy;
private SimpleStringProperty createdOn;

public CompanyTableData(CompanyData companyData){
    this.itemCompanyId = new SimpleStringProperty(companyData.getItemCompanyId());
    this.itemCompanyName = new SimpleStringProperty(companyData.getItemCompanyName());
    this.createBy = new SimpleStringProperty(companyData.getCreatedBy());
    this.createdOn = new SimpleStringProperty(companyData.getCreatedOn());
}

public String getItemCompanyId() {
    return itemCompanyId.get();
}

public SimpleStringProperty itemCompanyIdProperty() {
    return itemCompanyId;
}

public void setItemCompanyId(String itemCompanyId) {
    this.itemCompanyId.set(itemCompanyId);
}

public String getItemCompanyName() {
    return itemCompanyName.get();
}

public SimpleStringProperty itemCompanyNameProperty() {
    return itemCompanyName;
}

public void setItemCompanyName(String itemCompanyName) {
    this.itemCompanyName.set(itemCompanyName);
}

public String getCreateBy() {
    return createBy.get();
}

public SimpleStringProperty createByProperty() {
    return createBy;
}

public void setCreateBy(String createBy) {
    this.createBy.set(createBy);
}

public String getCreatedOn() {
    return createdOn.get();
}

public SimpleStringProperty createdOnProperty() {
    return createdOn;
}

public void setCreatedOn(String createdOn) {
    this.createdOn.set(createdOn);
}

}

细胞工厂成立

company.setCellFactory(param -> new CompanyCell());

和 CompanyCell

public class CompanyCell extends ListCell<CompanyTableData> {
@Override
protected void updateItem(CompanyTableData item, boolean empty) {
    super.updateItem(item, empty);
    if (empty || item == null || item.getItemCompanyName() == null) {
        setText(null);
    } else {
        setText(item.getItemCompanyName());
    }
}

}

毕竟,当我尝试以编程方式将项目设置为

company.getSelectionModel().select(getSelectedCompanyIndex());

getSelectedCompanyIndex() 函数如下。

public static CompanyTableData getSelectedCompanyIndex(){
    CompanyTableData c = null,i;
    Iterator<CompanyTableData> itr = GetCompany.getCompanyTableData().iterator();
    while (itr.hasNext()){
        i = itr.next();
        if (i.getItemCompanyName().equals(Element.getItemTableData().getCompany())){

            c = i;
        }
    }
    return c;
}

我得到的结果是 在此处输入图像描述 最后 在此处输入图像描述 它应该在列表中选择一个名称或项目,但它设置了我认为的某种类型的对象。

现在我该怎么办。是否需要任何类型的字符串转换。

标签: javafxcombobox

解决方案


用于在未显示组合框弹出窗口时显示项目的buttonCell不会使用cellFactory. 您还需要设置此属性以使用相同的单元实现:

company.setCellFactory(param -> new CompanyCell());
company.setButtonCell(new CompanyCell());

推荐阅读