当前位置: 首页 > 知识库问答 >
问题:

JavaFX填充TableView从观察列表

沈德寿
2023-03-14

我正在尝试用来自可观察列表的数据填充TableView。我以前做过这个,但由于某种原因我现在无法让它工作。我没有得到任何异常或任何东西,但它根本不会向表添加任何东西。

这个问题很相似,但我发现了JPA引起的另一个问题,这使得提到的修改的构造函数永远不会执行。相反,JPA会神奇地分配值。

这是我的代码-我剪下了与问题无关的代码:

FXML

<TableView fx:id="tblModifications" layoutX="14.0" layoutY="14.0" prefHeight="545.0" prefWidth="512.0">
    <columns>
        <TableColumn prefWidth="75.0" text="%itemNumber" fx:id="colModArt"/>
        <TableColumn prefWidth="75.0" text="%name" fx:id="colModName"/>
        <TableColumn prefWidth="75.0" text="%amount" fx:id="colModAmount" />
    </columns>
</TableView>

主要的Java语言

public class Main extends Application implements Initializable {
    private TableView<Modification> tblModifications;
    private TableColumn<ObservableList<Modification>, String> colModArt;
    private TableColumn<ObservableList<Modification>, String> colModName;
    private TableColumn<ObservableList<Modification>, Integer> colModAmount;

    @Override
    public void initialize(URL arg0, ResourceBundle arg1){
        colModArt.setCellValueFactory(new PropertyValueFactory<>("barcodeProperty"));
        colModName.setCellValueFactory(new PropertyValueFactory<>("nameProperty"));
        colModAmount.setCellValueFactory(new PropertyValueFactory<>("amountProperty"));

        admin = Administration.getInstance();

        tblModifications.setItems(admin.observableModifications); // This list is populated with correct data, I tested.
    }

    @Override
    public void start(Stage primaryStage) throws Exception{
        resources = ResourceBundle.getBundle("strings", new Locale("NL"));
        Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("main.fxml"), resources);
        primaryStage.setTitle(resources.getString("title"));
        primaryStage.setScene(new Scene(root, 1280, 1024));
        primaryStage.show();
    }
}

修改Java语言

public class Modification {
    public SimpleStringProperty barcodeProperty;
    public SimpleStringProperty nameProperty;
    public SimpleIntegerProperty amountProperty;
    private int id;
    private Seller seller;
    private Product product;
    private int amount;
    private Boolean accepted;

    public Modification(int id, Seller seller, Product product, int amount) {
        this.id = id;
        this.seller = seller;
        this.product = product;
        this.amount = amount;
        this.accepted = false;

        barcodeProperty.set(String.valueOf(product.getBarcode()));
        nameProperty.set(product.getName());
        amountProperty.set(amount);
    }
}

任何帮助解决这个问题将不胜感激!

共有1个答案

王飞虎
2023-03-14

看来这个问题部分是由JPA引起的。

首先,我在Property tyValueFactory中使用了不正确的字段名称。我不得不从中删除Property部分,因为显然这是自动添加的(反射?)

其次,JPA实现从未执行过修改构造函数,因此SimpleStringProperty从未得到它的值。我通过为以下值编写自己的getter来解决此问题:getProductName和getProductBarcode

 类似资料:
  • 我试图从数据(ObservableList)中填充tableview2(fx:id tableview)行。但当它完成时,tableview2只显示空记录。在控制台中,我看到数据中的所有行(ObservableList)。我知道stackoverflow中有很多关于这方面的问题,很抱歉(还有我的英语),但请你问我代码中的错误在哪里?感谢您的帮助或关注)。 更新(添加MainPayer.java和更

  • 我想知道是否可以使用来填充?我使用了而不是,因为我需要经常添加和删除,所以我需要最小化成本。 我的hashMap使用一个大整数作为键字段,一个具有许多属性的类型作为值字段。在我的tableView中,我只想显示每个属性都有一列的值。我希望你说清楚了 谢谢

  • 我正在用一个库编程,我不知道代码,只知道方法,我不能修改它。我试着制作一个“航班”的表格视图,但我不知道如何为每个航班命名(或ID)。有人能帮我吗?谢谢此处有一些代码:

  • 我有一个用SceneBuilder生成的TableView,所有列都是从其他视图导入的FXML,直到没有问题为止,但列没有填充宽度。 我试图用scene builder和FXML来解决这个问题,但没有运气,所有的大小都是计算出来的。 我尝试用一个change listener对其进行编码,它在每次窗口改变大小以适应列的大小时都会进行检查。 这样可以工作,并且列的大小调整到适当的宽度(基本上我得到了

  • //控制器类Mainguicontroller.java

  • 我试图用列表中的字符串数组动态填充TableView(我想有更好的方法来处理信息,但这是我被赋予的任务…),所以我创建了一个TableView,创建了所有的列和东西,但在填充TableView的时候我迷路了。 列表中有所有的字符串数组,一切似乎都正常工作,任何数组上都没有MissPlated数据或类似的东西,当我运行项目时,列名按照我希望的方式出现,列表中的每个数组在tableview上都有一行,