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

时间:2014-10-24 20:32:13

标签: javafx-2 fxml

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

1 个答案:

答案 0 :(得分:6)

  1. 在fxml文件中定义TableView。几点注意事项:
    • root应该有一个与之关联的控制器类。
    • TableView和TableColumn应该指定fx:id属性。
  2. <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。
      • 变量的名称应与fx:id的对应属性值相同 在fxml中提到。
      • 控制器类应该实现javafx.fxml.Initializable,因此应该定义方法public void initialize(URL location,ResourceBundle resources)
      • 类Data Model类MyDataModel用于填充数据。

        public class 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);
        }
        

        }