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);
? ? }
}
這是正在運行的應用程序的屏幕截圖。
添加回答
舉報