Ranjit Vamadevan
Ranjit Vamadevan

Reputation: 534

Unable select Javafx combobox items programmatically which uses objects

In the JavaFx ComboBox which uses a class object list .I want to select items in the ComboBox programmatically using getSelectionModel().select(object or index). i am not getting the desired result Although the value is set but it is something like this main.dao.Company.Company.CompanyTableData@74541e7b. The code is somewhat like this.

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

GetCompany.getCompanyTableData() returns observablelist of CompanyTableData class.

The ComboBox Looks as follows.

enter image description here

The CompanyTableData Class is as.

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);
}

}

The Cell Factory is set

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

And the 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());
    }
}

}

After all this when i try to set the items programmetically as

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

The getSelectedCompanyIndex() function is as follows.

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;
}

And the result i am getting is enter image description here And enter image description here At the end it should select a name or item in the list but it has set some type of object i think.

Now what should i do. Is there any type of string conversion required.

Upvotes: 0

Views: 84

Answers (1)

fabian
fabian

Reputation: 82451

The buttonCell used to display the item when the combobox popup is not shown is not automatically created using the cellFactory. You need to set this property too to use the same cell implementation:

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

Upvotes: 3

Related Questions