Swing y JFC: guía completa para interfaces gráficas en Java 21

JTree muestra datos en forma de árbol expandible. También sigue el patrón MVC: el modelo (TreeModel) gestiona los nodos y la vista los renderiza.

// Construir árbol con DefaultMutableTreeNode
DefaultMutableTreeNode raiz = new DefaultMutableTreeNode("Proyecto");

DefaultMutableTreeNode src = new DefaultMutableTreeNode("src");
DefaultMutableTreeNode main = new DefaultMutableTreeNode("main/java");
main.add(new DefaultMutableTreeNode("Main.java"));
main.add(new DefaultMutableTreeNode("Servicio.java"));
src.add(main);
raiz.add(src);

DefaultMutableTreeNode test = new DefaultMutableTreeNode("test");
test.add(new DefaultMutableTreeNode("MainTest.java"));
raiz.add(test);

JTree arbol = new JTree(raiz);
arbol.setRootVisible(true);
arbol.setShowsRootHandles(true);

// Expandir todos los nodos
for (int i = 0; i < arbol.getRowCount(); i++) arbol.expandRow(i);

JScrollPane scroll = new JScrollPane(arbol);

Responder a la selección

arbol.addTreeSelectionListener(e -> {
    DefaultMutableTreeNode nodo = (DefaultMutableTreeNode) arbol.getLastSelectedPathComponent();
    if (nodo != null) {
        System.out.println("Seleccionado: " + nodo.getUserObject());
    }
});

JSplitPane y JTabbedPane

// Panel dividido (arrastrable)
JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
    new JScrollPane(arbol),
    new JScrollPane(detalles));
split.setDividerLocation(200);
split.setOneTouchExpandable(true);

// Panel con pestañas
JTabbedPane tabs = new JTabbedPane();
tabs.addTab("General",     new ImageIcon("general.png"), panelGeneral,    "Configuración general");
tabs.addTab("Avanzado",    panelAvanzado);
tabs.addTab("Estadísticas", panelStats);
tabs.setSelectedIndex(0);

JScrollPane: desplazamiento

JScrollPane scroll = new JScrollPane(componente);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

// Velocidad de desplazamiento
scroll.getVerticalScrollBar().setUnitIncrement(16);

// Añadir cabecera o esquina
scroll.setColumnHeaderView(new JLabel("Encabezado"));

Menús en Swing

JMenuBar barra = new JMenuBar();

JMenu menuArchivo = new JMenu("Archivo");
menuArchivo.setMnemonic(KeyEvent.VK_A);

JMenuItem nuevo = new JMenuItem("Nuevo", KeyEvent.VK_N);
nuevo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_DOWN_MASK));
nuevo.addActionListener(e -> nuevoDocumento());
menuArchivo.add(nuevo);

menuArchivo.addSeparator();

JMenuItem salir = new JMenuItem("Salir");
salir.addActionListener(e -> System.exit(0));
menuArchivo.add(salir);

barra.add(menuArchivo);
frame.setJMenuBar(barra);

// Menú contextual (clic derecho)
JPopupMenu popup = new JPopupMenu();
popup.add(new JMenuItem("Copiar"));
popup.add(new JMenuItem("Pegar"));
componente.setComponentPopupMenu(popup);

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP