How to populate TableView dynamically with FXML an

2019-02-11 07:44发布

How do I define my table in FXML and then use my JavaFX code to populate it dynamically at runtime?

标签: javafx-2 fxml
1条回答
女痞
2楼-- · 2019-02-11 08:12
  1. Define the TableView in the fxml file. Few things to note:
    • the root should have a controller class associated with it.
    • the TableView and TableColumn should have fx:id attributes specified.

<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. Define the controller class. Few things to note:

    • the variables should be linked with the @FXML tag and a new object of TableView/TableColumn should not be created.
    • the variables should be named the same as the corresponding attribute value of fx:id as mentioned in the fxml.
    • the controller class should implement javafx.fxml.Initializable and hence should define the method public void initialize(URL location, ResourceBundle resources)
    • a class Data Model class MyDataModel is used to populate the data.

      public class MyController implements 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. Define the Data Model class. Few things to note:

    • the variable should be named as idColumnProperty as the string passed for PropertyValueFactory is "idColumn".
    • the variable must be private final SimpleStringProperty as the type mentioned in controller class is String for the column.
    • the model class must have the methods getIdColumn() and setIdColumn(String id)

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

      }

查看更多
登录 后发表回答