Невозможно выбрать элементы комбинированного списка Javafx программно, который использует объекты - PullRequest
0 голосов
/ 22 сентября 2019

В JavaFx ComboBox, который использует список объектов класса. Я хочу программно выбирать элементы в ComboBox, используя getSelectionModel (). Select (объект или индекс).Я не получаю желаемого результата. Хотя значение установлено, но это что-то вроде main.dao.Company.Company.CompanyTableData@74541e7b.Код выглядит примерно так:

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

GetCompany.getCompanyTableData () возвращает список наблюдаемых класса CompanyTableData.

ComboBox выглядит следующим образом.

enter image description here

Класс 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;
}

И результат, который я получаю: enter image description here И enter image description here В конце он должен выбрать имя или элемент в списке, но он установил некоторый типобъект, я думаю.

Теперь что мне делать.Требуется ли какой-либо тип преобразования строк.

1 Ответ

3 голосов
/ 22 сентября 2019

buttonCell, используемый для отображения элемента, когда всплывающее окно со списком не отображается, автоматически не создается с помощью cellFactory.Вам также нужно установить это свойство, чтобы использовать ту же реализацию ячеек:

company.setCellFactory(param -> new CompanyCell());
company.setButtonCell(new CompanyCell());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...