TableView JavaFx APP 中的空白行

blank Row in TableView JavaFx APP

我正在尝试在我的 javafx 应用程序中使用 tableview,但它在 tableview 中给了我空白行..... 这是示例输出:

这是模型 class 的代码:

public class Pizza {
    private final SimpleStringProperty pname;
    private final SimpleStringProperty pflavour;
    private final SimpleStringProperty psize;
    private final SimpleDoubleProperty pprice;
    public Pizza(String name, String flavour, String size, Double price) {
        super();
        this.pname = new SimpleStringProperty(name);
        this.pflavour = new SimpleStringProperty( flavour);
        this.psize = new SimpleStringProperty(size);
        this.pprice = new SimpleDoubleProperty(price);
    }
    public String getName() {
        return pname.get();
    }
    public String getFlavour() {
        return pflavour.get();
    }
    public String getSize() {
        return psize.get();
    }
    public Double getPrice() {
        return pprice.get();
    }

}

这是控制器 class 的代码:

        @FXML
        private TableView<Pizza> pizzatable;
        @FXML
        private TableColumn<Pizza,String> pname;
        @FXML
        private TableColumn<Pizza,String> pflavour;
        @FXML
        private TableColumn<Pizza,String> psize;
        @FXML
        private TableColumn<Pizza,Double> pprice;
        ObservableList<Pizza> pizzalist;

这是我调用以从数据库中获取数据的方法的代码:

public void fetchpizza() throws SQLException{
        stmt = conn.createStatement();
        sql = "select * from items where itype = 'Pizza'";
        rs = stmt.executeQuery(sql);
        pname.setCellValueFactory(new PropertyValueFactory<Pizza,String>("pname"));
        pflavour.setCellValueFactory(new PropertyValueFactory<Pizza,String>("pflavour"));
        psize.setCellValueFactory(new PropertyValueFactory<Pizza,String>("psize"));
        pprice.setCellValueFactory(new PropertyValueFactory<Pizza,Double>("pprice"));
        pizzalist = FXCollections.observableArrayList();
        while(rs.next()){
            pizzalist.add(new Pizza(rs.getString("oname"),rs.getString("flavour"),rs.getString("size"),rs.getDouble("price")));
            pizzatable.setItems(pizzalist);
        }
        rs.close();
        stmt.close();
    }

您需要使用 String 对应的 getter 或 属性 getter 作为 PropertyValueFactory 构造函数的参数。

例如如果将 "name" 作为参数传递给 PropertyValueFactory<Pizza, String> 的构造函数,则项目的以下方法之一将用于检索 value/property:

  • nameProperty()(应该returnStringProperty)。这允许观察值的变化而无需调用 TableView.refresh().
  • getName()(应该returnString

但是您传递了字段的名称。由于方法名称没有符合要求的模式,因此 TableCells 保持为空。