How do I define my table in FXML and then use my JavaFX code to populate it dynamically at runtime?
<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>
Define the controller class. Few things to note:
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.
}
}
Define the Data Model class. Few things to note:
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);
}
}