如何使用FXML和JavaFX动态填充TableView

奇兰吉卜

如何在FXML中定义表,然后使用JavaFX代码在运行时动态填充表?

奇兰吉卜
  1. 在fxml文件中定义TableView。几件事要注意:
    • 根目录应具有与之关联的控制器类。
    • TableView和TableColumn应指定fx:id属性。

<BorderPane xmlns:fx="http://javafx.com/fxml" fx:controller="com.example.MyController"> <center> <ScrollPane disable="false" visible="true"> <content> <TableView fx:id="myTableView" prefHeight="-1.0" prefWidth="-1.0"> <columns> <TableColumn fx:id="idColumn" prefWidth="100.0" text="Id" /> </columns> </TableView> </content> </ScrollPane> </center> </BorderPane>

  1. 定义控制器类。几件事要注意:

    • 变量应与@FXML标记链接,并且不应创建TableView / TableColumn的新对象。
    • 变量的名称应与fxml中提到的fx:id的相应属性值相同。
    • 控制器类应实现javafx.fxml.Initializable,因此应定义方法public void initialize(URL位置,ResourceBundle资源)
    • 数据模型类MyDataModel类用于填充数据。

      公共类MyController实现了Initializable {

      @FXML
      private TableView<MyDataModel> myTableView;
      
      @FXML
      private TableColumn<MyDataModel, String> idColumn;
      
      @Override
      public void initialize(URL location, ResourceBundle resources) {
      idColumn.setCellValueFactory(new PropertyValueFactory<MyDataModel, String>"idColumn"));
      
      myTableView.getItems().setAll(getItemsToAdd());
      }
      
      private List<MyDataModel> getItemsToAdd(){
      // this method would fetch the necessary items from database.
      }
      

      }

  2. 定义数据模型类。几件事要注意:

    • 该变量应命名为idColumnProperty,因为为PropertyValueFactory传递的字符串是“ idColumn”。
    • 该变量必须是私有的最终SimpleStringProperty,因为该控制器类中提到的类型是该列的String。
    • 模型类必须具有方法getIdColumn()和setIdColumn(String id)

      公共类MyDataModel {

      private final SimpleStringProperty idColumnProperty = new SimpleStringProperty("");
      
      public MyDataModel(){
      this("");
      }
      
      public MyDataModel(String id){
      setIdColumn(id);    
      }
      
      public String getIdColumn(){
      idColumnProperty.get();
      }
      
      public void setIdColumn(String id){
      idColumnProperty.set(id);
      }
      

      }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章