data - llenar tableview javafx
Cómo llenar un TableView que está definido en un archivo fxml que está diseñado en JavaFx Scene Builder (2)
Para acceder a la vista de tabla, debe definir un controlador de su página FXML. Añadir
fx:controller="path.to.MyController"
atribuir al AnchorPane
en el archivo FXML. Luego cree el controlador y vincule TableView, TableColumns desde el archivo @FXML
colocando la anotación @FXML
delante de estas variables:
package path.to;
public class MyController implements Initializable {
@FXML private TableView<User> tableView;
@FXML private TableColumn<User, String> UserId;
@FXML private TableColumn<User, String> UserName;
@FXML private TableColumn<User, String> Active;
@Override
public void initialize(URL location, ResourceBundle resources) {
UserId.setCellValueFactory(new PropertyValueFactory<User, String>("id"));
UserName.setCellValueFactory(new PropertyValueFactory<User, String>("name"));
Active.setCellValueFactory(new PropertyValueFactory<User, String>("active"));
tableView.getItems().setAll(parseUserList());
}
private List<User> parseUserList(){
// parse and construct User datamodel list by looping your ResultSet rs
// and return the list
}
}
La vista de tabla se rellena en el método de initialize
. Tenga en cuenta que en el controlador no estamos creando nuevas vistas de tabla o tabla, ya que ya están creadas mientras se carga el archivo FXML. También tenga en cuenta que los nombres de las variables TableView y Tablecolumn deben ser los mismos con los valores de fx:id
en el archivo FXML correspondiente. Entonces, si bien los nombres UserId, UserName y Active no son nombres convenientes, cámbielos tanto en el archivo FXML como en Controller a nombres como userIdCol, userNameCol y userActiveCol respectivamente.
Me gustaría saber cómo llenar un TableView con datos ... Todos los ejemplos que he visto crean un TableView con columnas y todo y lo agrego a la escena. Todo hecho en el propio código java.
Lo que quiero saber: si diseño mi "formulario" en JavaFx Scene Builder. Definiendo todas las tablas y columnas allí. ¿Cómo accedo a él para poblarlo desde java? O si alguien puede indicarme un tutorial adecuado sobre esto, por favor.
He definido mi formulario en JavaFx Scene Builder, solo un TableView con 3 columnas
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="288.0" prefWidth="293.0" xmlns:fx="http://javafx.com/fxml">
<children>
<TableView fx:id="tableView" layoutX="35.0" layoutY="28.0" prefHeight="200.0" prefWidth="227.0">
<columns>
<TableColumn prefWidth="75.0" text="UserId" fx:id="UserId" />
<TableColumn prefWidth="75.0" text="UserName" fx:id="UserName" />
<TableColumn prefWidth="75.0" text="Active" fx:id="Active" />
</columns>
</TableView>
</children>
</AnchorPane>
Tengo mis datos en un ResultSet en mi código de Java.
ResultSet rs = c.createStatement().executeQuery(SQL);
Necesito rellenar el TableView.
Gracias
Puedes hacer esto en tu controlador:
@FXML
private TableView<User> table;
private List<User> users;
@Override
public void initialize(URL url, ResourceBundle rb) {
// Set the columns width auto size
table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
table.getColumns().get(0).prefWidthProperty().bind(table.widthProperty().multiply(0.33)); // 33% for id column size
table.getColumns().get(1).prefWidthProperty().bind(table.widthProperty().multiply(0.33)); // 33% for dt column size
table.getColumns().get(2).prefWidthProperty().bind(table.widthProperty().multiply(0.33)); // 33% for cv column size
table.getItems().setAll(this.users);
}