【问题标题】:How to populate TableView dynamically with FXML and JavaFX如何使用 FXML 和 JavaFX 动态填充 TableView
【发布时间】:2014-12-20 18:12:11
【问题描述】:

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

【问题讨论】:

    标签: javafx-2 fxml


    【解决方案1】:
    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。
      • 变量的名称应与 fx:id 的相应属性值相同,如 fxml 中提到过。
      • 控制器类应该实现 javafx.fxml.Initializable,因此应该定义方法 public void initialize(URL location, ResourceBundle resources)
      • 类数据模型类 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”。
      • 变量必须是 private final 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);
        }
        

        }

    【讨论】:

      猜你喜欢
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 2013-06-28
      • 2013-06-01
      • 2014-10-08
      • 2018-10-14
      • 2018-06-01
      相关资源
      最近更新 更多