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
)
但是您传递了字段的名称。由于方法名称没有符合要求的模式,因此 TableCell
s 保持为空。
我正在尝试在我的 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
)
但是您传递了字段的名称。由于方法名称没有符合要求的模式,因此 TableCell
s 保持为空。