您好我试图使用ObservableList填充我的JavaFx TableView,如下所示:
emf = Persistence.createEntityManagerFactory("shopPu");
em = emf.createEntityManager();
List<Products> proList = em.createQuery("select p from Products p").getResultList();
ObservableList<Products> proObs = FXCollections.observableList(proList);
tableView.setEditable(true);
tableView.setItems(proObs);
它的工作没有错误我的List正在填充数据,但TableView没有显示任何内容。
这是我的FXML
<TableView fx:id="tProducts" prefHeight="246.0" prefWidth="726.0" AnchorPane.bottomAnchor="160.0" AnchorPane.leftAnchor="7.0" AnchorPane.rightAnchor="7.0" AnchorPane.topAnchor="70.0">
<columns>
<TableColumn text="ID" fx:id="ID"/>
</columns>
</TableView>
我试过这个:
<TableView fx:id="tProducts" prefHeight="246.0" prefWidth="726.0" AnchorPane.bottomAnchor="160.0" AnchorPane.leftAnchor="7.0" AnchorPane.rightAnchor="7.0" AnchorPane.topAnchor="70.0">
<columns>
<TableColumn text="ID" fx:id="ID">
<cellValueFactory>
<PropertyValueFactory property="id" />
</cellValueFactory>
</TableColumn>
</columns>
</TableView>
但是没有运气会给出这样的错误:
javafx.fxml.LoadException: PropertyValueFactory is not a valid type.
at javafx.fxml.FXMLLoader.createElement(Unknown Source)
at javafx.fxml.FXMLLoader.processStartElement(Unknown Source)
请帮助填写TableView
的方法更新
控制器:
public class MainWindow implements Initializable {
@FXML private Label lblStatus;
@FXML private TableView<Products> tableView;
private EntityManager em;
private EntityManagerFactory emf;
@FXML
private void Refresh_Clicked(javafx.event.ActionEvent event) {
try {
emf = Persistence.createEntityManagerFactory("shopPu");
em = emf.createEntityManager();
List<Products> proList = em.createQuery("select p from Products p").getResultList();
ObservableList<Products> proObs = FXCollections.observableList(proList);
tableView.setEditable(true);
tableView.setItems(proObs);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.getMessage());
}
}
感谢。
答案 0 :(得分:1)
根据你的FXML
你的TableView
应该命名为tProducts
。但是这应该在注入期间产生错误,你可以粘贴控制器代码吗?
答案 1 :(得分:1)
如果不进一步分析您的代码示例,发布的错误可能是由于PropertyValueFactory的fxml中缺少导入。
答案 2 :(得分:1)
我在我的项目中解决了一个在SEML文件中添加此行的问题。
<?import javafx.scene.control.cell.PropertyValueFactory ?>
答案 3 :(得分:0)
你必须在代码中使用相同的TableView和fxid名称。
<TableView fx:id="table" layoutX="27.0" layoutY="65.0" prefHeight="193.0" prefWidth="552.0">
TableView table;
你必须初始化表格列......并定义它们的属性。
试试这个..
@FXML
private TableColumn<CheckDo, String> username;
username.setCellValueFactory(new PropertyValueFactory<CheckDo,String>("username"));
你必须为它的显示值设置列的setvaluefactory