【发布时间】:2020-05-14 16:24:03
【问题描述】:
我是java新手,不完全了解Javafx的结构,所以我在这里迷路了。
这是我正在学习的课程的库存管理应用程序。
我有两个继承自抽象类的类,以及一个包含两个子类实例的 ObservableList。现在,当我尝试使用 cellvaluefactory 在 TableView 中同时显示这两个类时,由于缺少其中一个或另一个属性,我会收到错误消息。该程序可以编译,但警告是由于其各自实例中缺少的任何字段中的字段“缺失”。 (PartOutsourced 缺少“machineId”字段,PartInhouse 缺少“companyName”字段。
我知道必须有某种方法让 cellValueFactory 忽略空值或用空字符串填充它们,但我不知道如何,而且谷歌一直是死路一条。
这是两个子类:
public class PartOutsourced extends Part {
private String companyName;
public PartOutsourced(String name, int stock, double price, int min, int max, String companyName) {
super(name, stock, price, min, max);
this.companyName = companyName;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
}
public class PartInHouse extends Part {
private int machineId;
public PartInHouse(String name, int stock, double price, int min, int max, int machineId) {
super(name, stock, price, min, max);
this.machineId = machineId;
}
public int getMachineId() {
return machineId;
}
public void setMachineId(int machineId) {
this.machineId = machineId;
}
}
这里是 cellValueFactory 代码:
col_id.setCellValueFactory(new PropertyValueFactory<Part, String>("id"));
col_name.setCellValueFactory(new PropertyValueFactory<Part, String>("name"));
col_stock.setCellValueFactory(new PropertyValueFactory<Part, String>("stock"));
col_price.setCellValueFactory(new PropertyValueFactory<Part, String>("price"));
col_min.setCellValueFactory(new PropertyValueFactory<Part, String>("min"));
col_max.setCellValueFactory(new PropertyValueFactory<Part, String>("max"));
col_machine_id.setCellValueFactory(new PropertyValueFactory<Part, String>("machineId"));
col_company.setCellValueFactory(new PropertyValueFactory<Part, String>("companyName"));
堆栈跟踪的一点点:
May 14, 2020 12:14:06 PM javafx.scene.control.cell.PropertyValueFactory getCellDataReflectively
WARNING: Can not retrieve property 'machineId' in PropertyValueFactory: javafx.scene.control.cell.PropertyValueFactory@5f88bef3 with provided class type: class inventory.datamodel.PartOutsourced
java.lang.IllegalStateException: Cannot read from unreadable property machineId
【问题讨论】:
-
为了使继承起作用,所有重要的方法都应该在抽象类中。这样,各个子类就可以根据您的需要返回适当的值。
标签: java javafx observablelist