JavaFX
Vista de tabla en árbol
Este control es una mezcla de la vista de tabla y la vista en árbol, por lo que su potencia es bastante grande. Permite mostrar una jerarquía de elementos de una forma tabular. Permite seleccionar uno o varios elementos y también editarlos.
La vista de tabla en árbol pertenece a la clase javafx.scene.control.TreeTableView
. Las columnas de la tabla pertenecen a la clase javafx.scene.control.TreeTableColumn
y los elementos de la jerarquía a la clase javafx.scene.control.TreeItem
.
El modelo asociado es una mezcla de la vista de tabla y la vista de árbol.
El código utilizado para crear esta interfaz es el siguiente:
package javafx.controles;
import javafx.application.Application;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class VistaTablaArbol extends Application {
public static class Personaje {
private String nombre;
private String apellidos;
private Personaje(String nombre, String apellidos) {
this.nombre = nombre;
this.apellidos = apellidos;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellidos() {
return apellidos;
}
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
}
private static final ObservableList<Personaje> MASCULINOS = FXCollections.observableArrayList(
new Personaje("Pepito", "Grillo"),
new Personaje("Bob", "Esponja"),
new Personaje("Juan", "Sin Miedo"),
new Personaje("Perico", "De Los Palotes"));
private static final ObservableList<Personaje> FEMENINOS = FXCollections.observableArrayList(
new Personaje("Juana", "La Loca"));
@Override
public void start(Stage escenarioPrincipal) {
try {
VBox raiz = new VBox();
raiz.setPadding(new Insets(40));
raiz.setSpacing(10);
Label lbPersonajes = new Label("Personajes:");
//Creo los diferentes elementos del árbol
TreeItem<Personaje> tiRaiz = new TreeItem<>(new Personaje("Personajes", ""));
TreeItem<Personaje> tiMasculinos = new TreeItem<>(new Personaje("Masculinos", ""));
for (Personaje masculino : MASCULINOS) {
tiMasculinos.getChildren().add(new TreeItem<>(masculino));
}
TreeItem<Personaje> tiFemeninos = new TreeItem<>(new Personaje("Femeninos", ""));
for (Personaje femenino : FEMENINOS) {
tiFemeninos.getChildren().add(new TreeItem<>(femenino));
}
tiRaiz.getChildren().add(tiMasculinos);
tiRaiz.getChildren().add(tiFemeninos);
tiRaiz.setExpanded(true);
tiMasculinos.setExpanded(true);
tiFemeninos.setExpanded(true);
//Creo las columnas y defino los contenidos de las celdas
TreeTableColumn<Personaje, String> columnaNombre = new TreeTableColumn<>("Nombre");
columnaNombre.setMinWidth(120);
columnaNombre.setCellValueFactory((
TreeTableColumn.CellDataFeatures<Personaje, String> parametro) ->
new ReadOnlyStringWrapper(parametro.getValue().getValue().getNombre()));
TreeTableColumn<Personaje, String> columnaApellidos = new TreeTableColumn<>("Apellidos");
columnaApellidos.setMinWidth(150);
columnaApellidos.setCellValueFactory((
TreeTableColumn.CellDataFeatures<Personaje, String> parametro) ->
new ReadOnlyStringWrapper(parametro.getValue().getValue().getApellidos()));
//Creo la vista de tabla en árbol y le añado las columnas
TreeTableView<Personaje> ttvPersonajes = new TreeTableView<>(tiRaiz);
ttvPersonajes.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
ttvPersonajes.getColumns().add(columnaNombre);
ttvPersonajes.getColumns().add(columnaApellidos);
raiz.getChildren().addAll(lbPersonajes, ttvPersonajes);
Scene escena = new Scene(raiz, 320, 350);
escenarioPrincipal.setTitle("Vista de tabla en árbol");
escenarioPrincipal.setScene(escena);
escenarioPrincipal.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}