Saltar la navegación

Vista de árbol

La vista en árbol es otro control muy potente ya que permite mostrar una jerarquía de elementos, los cuales podemos seleccionar e incluso editar.

Una vista de árbol pertenece a la clase javafx.scene.control.TreeView. Cada elemento del árbol pertenece a la clase javafx.scene.control.TreeItem.

Necesita tener asociado un modelo que consistirá en la raíz del árbol del tipo TreeItem y que ésta a su vez estará formada por diferentes elementos del tipo TreeItem de forma recursiva. Los nodos podemos mostrarlos expandidos o contraidos mediante el método setExpanded.

En la imagen siguiente se muestra una vista de árbol de personajes (con sus nombres y apellidos) clasificados jerárquicamente en masculinos y femeninos.

El código utilizado para crear esta interfaz es el siguiente:

package javafx.controles;

import javafx.application.Application;
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.TreeView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class VistaArbol extends Application {

	@Override
	public void start(Stage escenarioPrincipal) {
		try {
			VBox raiz = new VBox();
			raiz.setPadding(new Insets(40));
			raiz.setSpacing(10);
			
			Label lbPersonajes = new Label("Personajes:");
			TreeItem<String> tiRaiz = new TreeItem<> ("Personajes");
			tiRaiz.setExpanded(true);
	        TreeItem<String> tiMasculinos = new TreeItem<> ("Masculinos");            
	        tiRaiz.getChildren().add(tiMasculinos);
	        TreeItem<String> ti1 = new TreeItem<> ("Pepito Grillo");            
	        tiMasculinos.getChildren().add(ti1);
	        TreeItem<String> ti2 = new TreeItem<> ("Bob Esponja");            
	        tiMasculinos.getChildren().add(ti2);
	        TreeItem<String> ti3 = new TreeItem<> ("Juan Sin Miedo");            
	        tiMasculinos.getChildren().add(ti3);
	        TreeItem<String> ti4 = new TreeItem<> ("Perico De Los Palotes");            
	        tiMasculinos.getChildren().add(ti4);
	        TreeItem<String> tiFemeninos = new TreeItem<> ("Femeninos");            
	        tiRaiz.getChildren().add(tiFemeninos);
	        TreeItem<String> ti5 = new TreeItem<> ("Juana La Loca");            
	        tiFemeninos.getChildren().add(ti5);
	        TreeView<String> tvPersonajes = new TreeView<> (tiRaiz); 

			tvPersonajes.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
			
			raiz.getChildren().addAll(lbPersonajes, tvPersonajes);
			
			Scene escena = new Scene(raiz, 300, 280);
			escenarioPrincipal.setTitle("Vista de árbol");
			escenarioPrincipal.setScene(escena);
			escenarioPrincipal.show();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		launch(args);
	}

}