1 回答
TA贡献1841条经验 获得超3个赞
请阅读PropertyValueFactory类的javadoc。 这行代码(来自类)...MainViewController
PartId.setCellValueFactory(new PropertyValueFactory<>("PartId"));
意味着您的类Part
具有以下声明的方法...
public ObservableValue<Integer> PartIdProperty()
请注意,名称区分大小写。换句话说,partIdProperty
是不正确的。这同样适用于彼此TableColumn
。从您发布的代码来看,您的类中似乎缺少这些方法Part
。
或者,您可以编写自己的Callback接口实现。该接口中方法的声明可能看起来很吓人,但实现起来实际上并不困难。请记住,接口方法是由JavaFX基础结构调用的。使用作为类实例的参数调用您的方法Part
,并且您的方法需要返回从方法参数中提取的适当的ObservableValue 。
Part
这是一个使用您的类显示零件表的小示例程序。请注意,它使用Java 1.8 中添加的方法引用。另请注意,在下面的代码中,getValue()
类中的该方法CellDataFeatures
返回一个Part
对象。
import javafx.application.Application;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TableColumn.CellDataFeatures;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class CellValueFactoryExample extends Application {
private ObservableList<Part> items;
@Override
public void init() {
items = FXCollections.observableArrayList();
for (int i = 0; i < 10; i++) {
Part part = new Part(i, String.valueOf(i), (double) i, i, i, i);
items.add(part);
}
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Inventory");
TableView<Part> table = createTable();
BorderPane root = new BorderPane();
root.setCenter(table);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
private TableView<Part> createTable() {
TableView<Part> table = new TableView<Part>(items);
TableColumn<Part, Number> idCol = new TableColumn<>("ID");
idCol.setCellValueFactory(this::getIdColumnValue);
TableColumn<Part, String> nameCol = new TableColumn<>("Name");
nameCol.setCellValueFactory(this::getNameColumnValue);
TableColumn<Part, Number> priceCol = new TableColumn<>("Price");
priceCol.setCellValueFactory(this::getPriceColumnValue);
TableColumn<Part, Number> stockCol = new TableColumn<>("Stock");
stockCol.setCellValueFactory(this::getStockColumnValue);
TableColumn<Part, Number> minCol = new TableColumn<>("Min");
minCol.setCellValueFactory(this::getMinColumnValue);
TableColumn<Part, Number> maxCol = new TableColumn<>("Max");
maxCol.setCellValueFactory(this::getMaxColumnValue);
table.getColumns().addAll(idCol, nameCol, priceCol, stockCol, minCol, maxCol);
return table;
}
private ObservableValue<Number> getIdColumnValue(CellDataFeatures<Part, Number> param) {
return new SimpleIntegerProperty(param.getValue().getId());
}
private ObservableValue<String> getNameColumnValue(CellDataFeatures<Part, String> param) {
return new SimpleStringProperty(param.getValue().getName());
}
private ObservableValue<Number> getPriceColumnValue(CellDataFeatures<Part, Number> param) {
return new SimpleDoubleProperty(param.getValue().getPrice());
}
private ObservableValue<Number> getStockColumnValue(CellDataFeatures<Part, Number> param) {
return new SimpleIntegerProperty(param.getValue().getStock());
}
private ObservableValue<Number> getMinColumnValue(CellDataFeatures<Part, Number> param) {
return new SimpleIntegerProperty(param.getValue().getMin());
}
private ObservableValue<Number> getMaxColumnValue(CellDataFeatures<Part, Number> param) {
return new SimpleIntegerProperty(param.getValue().getMax());
}
public static void main(String[] args) {
launch(args);
}
}
这是正在运行的应用程序的屏幕截图。
添加回答
举报