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);
