JavaFX 从 ObservableList 填充 TableView
JavaFX populate TableView from ObservableList
我正在尝试用 ObservableList 中的数据填充 TableView。我以前做过,但出于某种原因,我现在无法让它工作。我没有得到任何异常或任何东西,但它根本没有向 table.
添加任何内容
this 问题类似,但我发现了另一个由 JPA 引起的问题,该问题导致 Modification
的上述构造函数永远不会执行。相反,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>
Main.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();
}
}
Modification.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);
}
}
如能帮助解决此问题,我们将不胜感激!
这个问题似乎部分是由 JPA 引起的。
首先,我在 PropertyValueFactory
中使用了不正确的字段名称。我不得不从中删除 Property
部分,因为显然这是自动添加的(反射?)
其次,JPA 实现从未执行 Modification
构造函数,因此 SimpleStringProperty
从未获得其值。我通过为这些值编写自己的 getter 解决了这个问题:getProductName
和 getProductBarcode
我正在尝试用 ObservableList 中的数据填充 TableView。我以前做过,但出于某种原因,我现在无法让它工作。我没有得到任何异常或任何东西,但它根本没有向 table.
添加任何内容this 问题类似,但我发现了另一个由 JPA 引起的问题,该问题导致 Modification
的上述构造函数永远不会执行。相反,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>
Main.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();
}
}
Modification.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);
}
}
如能帮助解决此问题,我们将不胜感激!
这个问题似乎部分是由 JPA 引起的。
首先,我在 PropertyValueFactory
中使用了不正确的字段名称。我不得不从中删除 Property
部分,因为显然这是自动添加的(反射?)
其次,JPA 实现从未执行 Modification
构造函数,因此 SimpleStringProperty
从未获得其值。我通过为这些值编写自己的 getter 解决了这个问题:getProductName
和 getProductBarcode