当前位置: 首页 > 知识库问答 >
问题:

Java FX使用特定模型填充tableview

盖嘉珍
2023-03-14

您好,我有一个关于JavaFX中的TableView的问题,并通过该对象的getter方法(该对象是模型的一部分)用模型中某个对象的数据填充表。

首先,这是我的模型:

   package model;

import java.util.List;


public class Carmodel {

    private int carmodelID;
    private Cartype cartype;
    private Manufacturer manufacturer;
    private DrivingLicense drivingLicense;
    private String label;
    private int seats;
    private int kw;
    private String fuelType;
    private double priceDay;
    private double priceKM;
    private int axes;
    private int loadVolume;
    private int loadCapacity;
    private List<Equipment> equipmentList;


    public Carmodel() {


    }

    public int getCarmodelID() {
        return carmodelID;
    }

    public void setCarmodelID(int carmodelID) {
        this.carmodelID = carmodelID;
    }

    public Cartype getCartype() {
        return cartype;
    }

    public void setCartype(Cartype cartype) {
        this.cartype = cartype;
    }

    public Manufacturer getManufacturer() {
        return manufacturer;
    }

public void setManufacturer(Manufacturer manufacturer) {
    this.manufacturer = manufacturer;
}

public DrivingLicense getDrivingLicense() {
    return drivingLicense;
}

public void setDrivingLicense(DrivingLicense drivingLicense) {
    this.drivingLicense = drivingLicense;
}

public String getLabel() {
    return label;
}

public void setLabel(String label) {
    this.label = label;
}

public int getSeats() {
    return seats;
}

public void setSeats(int seats) {
    this.seats = seats;
}

public int getKw() {
    return kw;
}

public void setKw(int kw) {
    this.kw = kw;
}

public String getFuelType() {
    return fuelType;
}

public void setFuelType(String fuelType) {
    this.fuelType = fuelType;
}

public double getPriceDay() {
    return priceDay;
}

public void setPriceDay(double priceDay) {
    this.priceDay = priceDay;
}

public double getPriceKM() {
    return priceKM;
}

public void setPriceKM(double priceKM) {
    this.priceKM = priceKM;
}

public int getAxes() {
    return axes;
}

public void setAxes(int axes) {
    this.axes = axes;
}

public int getLoadVolume() {
    return loadVolume;
}

public void setLoadVolume(int loadVolume) {
    this.loadVolume = loadVolume;
}

public int getLoadCapacity() {
    return loadCapacity;
}

public void setLoadCapacity(int loadCapacity) {
    this.loadCapacity = loadCapacity;
}

public List<Equipment> getEquipmentList() {
    return equipmentList;
}

public void setEquipmentList(List<Equipment> equipmentList) {
    this.equipmentList = equipmentList;
}

如您所见,有一个特定成员(私有制造商制造商)它是“制造商”类型的对象。制造商类如下所示:

public class Manufacturer {

private int manufacturerID;
private String name;

public Manufacturer() {
}


public int getManufacturerID() {
    return manufacturerID;
}

public void setManufacturerID(int manufacturerID) {
    this.manufacturerID = manufacturerID;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
}

这是我的JavaFX视图控制器:

public class CarmodelController implements Initializable {


CarmodelRepository carmodelRepository;
@FXML public TableView CarmodelTable;
@FXML public TableColumn<Carmodel,Integer> tableColumnID ;
@FXML public TableColumn<Carmodel,String> tableColumnLabel ;
@FXML public TableColumn<Carmodel, String> tableColumnManufacturer ;
@FXML public TableColumn<Carmodel,String> tableColumnCartype ;




public void initialize(URL location, ResourceBundle resources) {


    carmodelRepository= new CarmodelRepository();

    List<Carmodel> carmodelList= carmodelRepository.readAll();

    ObservableList<Carmodel> carmodelObservableList = FXCollections.observableArrayList(carmodelList);



    tableColumnID.setCellValueFactory(new PropertyValueFactory<Carmodel, Integer>("carmodelID"));
    tableColumnLabel.setCellValueFactory(new PropertyValueFactory<Carmodel, String>("label"));
    tableColumnManufacturer.setCellValueFactory(new PropertyValueFactory<Carmodel, String>("manufacturer") 

问题是:

  1. 我能在这里做一些类似的事情吗,比如Property tyValueFactory("manufacturer.getName()");这样它就不起作用了。它只是用内存地址填充表的列

所以我的问题是:

如何获取制造商的名称,通常,在其他代码中,可以通过调用方法:“manufacturer.getName();”它将为您提供带有制造商名称的字符串,但在我将用这些特定的Carmodel填充表时,如何才能做到这一点?

和控制器代码的末尾(用值填充表)。

    CarmodelTable.setItems(carmodelObservableList);

}

提前感谢您!

共有1个答案

夏骞尧
2023-03-14

你可以做到

tableColumnManufacturer.setCellValueFactory(cellData -> 
    new ReadOnlyStringWrapper(cellData.getValue().getManufacturer().getName());

setCellValueFactory方法需要回调

 类似资料:
  • 我在互联网上找不到正确的答案,如何用ObservableMap作为MapProperty填充tableviw。我想在按值排序的tableview中显示文章。

  • 我正在为一个游戏开发Javafx应用程序。我有一些数据存储在枚举中,但似乎不知道如何轻松地将数据添加到JavaFX TableView,有人能帮我一下吗。我将使用fxml为TableView设置样式。 我希望每一个枚举vallue都在一个单独的行中,在我希望的列中: 图标为图像。 按整数排序。 级别为整数。 经验值为整数。 枚举:

  • //控制器类Mainguicontroller.java

  • 我的Java程序产生了很多数据,我用它构建了单个的ResultObject。因为只有某些结果对象会引起兴趣,所以我填充了一个可观察的HashMap 虽然映射和处理这些结果按预期工作,但我很难用该ObservableHashMap填充TableView 我的CustomObject(如果两个CustomObject具有相同的属性,只需检查JSONObject): 我的ObservableHashMa

  • 因此,我试图在我的JavaFX应用程序中创建一个自定义节点,它从扩展而来,因此可以自己进行渲染。我一开始只是试着画一个文本“Hello world”在画布上,但可惜它没有出现,即使我可以通过鼠标事件处理程序确认应用程序中是否存在自定义节点。 简而言之,如果我将这个的一个新实例添加到一个

  • 我无法用地图填充TableView 我有一个类,它拥有一个以产品名称为键、以正常价格为值的地图。我创建了一个tableView,其中一列是名称,一个主列是价格,分为两列normal和new,如下所示。 我已经做了这个方法使地图成为一个可观察列表。 这就是我卡住的地方。我不知道如何用这个可观察列表填充每个单元格。我确实知道我必须以某种方式使用“setCellFactory”。有人有什么建议吗?如何制