javafx - 无法以编程方式选择使用对象的 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;
}
我得到的结果是 最后 它应该在列表中选择一个名称或项目,但它设置了我认为的某种类型的对象。
现在我该怎么办。是否需要任何类型的字符串转换。
解决方案
用于在未显示组合框弹出窗口时显示项目的buttonCell
不会使用cellFactory
. 您还需要设置此属性以使用相同的单元实现:
company.setCellFactory(param -> new CompanyCell());
company.setButtonCell(new CompanyCell());
推荐阅读
- node.js - NodeJS - 将数据传递给 httpRequest
- java - 在 gradle 脚本中删除特定手机版本的权限
- microsoft-graph-api - 频道 lastModifiedDateTime 完全错误
- reactjs - 元素类型无效:需要一个字符串(用于内置组件)或 webpack 构建后的类/函数
- laravel - Laravel 通过不同的方法发送相同的通知
- string - 如何将字节从 rust 字符串中移出
- python - 从 mongo-db 中的最后一条记录中获取一列值
- flutter - 有什么方法可以在颤振中使用 zefyrEditor 中的验证属性和 onChanged 属性?
- r - 如何计算R中某段时间的最大平均值?
- c# - 用于检查多个纬度和经度值的正则表达式模式