如何在JavaFX中显示表信息?

以下代码应该显示库存所有零件可观察列表中的零件。我不确定这是否是库存类未返回正确的对象,或者是否发生了其他情况,或者我在表的初始化中是否遗漏了某些内容。

编辑:我期望通过MainViewController initializer.class 加载PartIdPartNamePartStock、 和通过类。InHouse 类扩展了 Part 类PartPriceInventoryobservableList allParts

主视图控制器

package ViewController;


import Model.InHouse;

import Model.Inventory;

import Model.Part;

import Model.Product;

import java.io.IOException;

import java.net.URL;

import java.util.HashSet;

import java.util.ResourceBundle;

import javafx.collections.ObservableList;

import javafx.event.ActionEvent;

import javafx.fxml.FXML;

import javafx.fxml.FXMLLoader;

import javafx.fxml.Initializable;

import javafx.scene.Node;

import javafx.scene.Parent;

import javafx.scene.Scene;

import javafx.scene.control.TableColumn;

import javafx.scene.control.TableView;

import javafx.scene.control.TextField;

import javafx.scene.control.cell.PropertyValueFactory;

import javafx.stage.Stage;


public class MainViewController implements Initializable {



    private static Inventory inventory;


    //Part FXIDs

    @FXML private TableView<Part> PartsTable;

    @FXML private TableColumn<Part, Integer> PartId;

    @FXML private TableColumn<Part, String> PartName;

    @FXML private TableColumn<Part, Integer> PartStock;

    @FXML private TableColumn<Part, Double> PartPrice;


    //sets up the table view and loads the parts from the inventory list

    public void initialize(URL url, ResourceBundle rb) {


        PartId.setCellValueFactory(new PropertyValueFactory<>("PartId"));

        PartName.setCellValueFactory(new PropertyValueFactory<>("PartName"));

        PartStock.setCellValueFactory(new PropertyValueFactory<>("PartStock"));

        PartPrice.setCellValueFactory(new PropertyValueFactory<>("PartPrice"));


        inventory.addPart(new InHouse(0, "name", 5.00, 1, 1, 5, 0));


        PartsTable.setItems(inventory.getAllParts());

    }


}


慕森王
浏览 121回答 1
1回答

偶然的你

请阅读PropertyValueFactory类的javadoc。 这行代码(来自类)...MainViewControllerPartId.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);    }}这是正在运行的应用程序的屏幕截图。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java