JavaFx 2.x TableView绑定列

时间:2012-09-04 08:39:45

标签: java data-binding tableview javafx javafx-2

您好我试图使用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());

        }

    }

感谢。

4 个答案:

答案 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