- 1. Clase Graphics
- 2. JButton y JLabel
- 3. JTextField
- 4. BorderLayout
- 5. JCheckBox
- 6. JRadioButton
- 7. JComboBox
- 8. JSlider
- 9. JSpinner
- 10. JToggleButton
- 11. JSeparator
- 12. JDialog
- 13. JProgressBar
- 14. JFormateddTextField
- 15. JEditorPane
- 16. JSplitPane
- 17. JTabbedPane
- 18. JDesktopPane
- 19. JToolBar
- 20. JMenubar
- 21. JTable
- 22. JTree
- 23. JFileChooser
Ejercicio 1
Crea una aplicación de Java Swing que realice las siguientes funciones: Ventana Principal: Crea una ventana principal (JFrame) con un título adecuado. Árbol de Datos: Añade un JTree a la ventana principal. El árbol debe representar una estructura de directorios y archivos. Botones de Interacción: Añade botones debajo del árbol para: Añadir un nuevo nodo (directorio o archivo). Eliminar un nodo seleccionado. Renombrar un nodo seleccionado. Funcionalidad: Implementa la lógica para añadir, eliminar y renombrar nodos en el árbol. Muestra mensajes adecuados (usando JOptionPane) para confirmar acciones como la eliminación de un nodo o error si no hay un nodo seleccionado.
package jtree;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
public class Ejercicio1 {
public static void main(String[] args) {
// Crea una instancia de la ventana principal
MarcoTree miMarco = new MarcoTree();
// Establece la operación de cierre para la ventana
miMarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Hace visible la ventana
miMarco.setVisible(true);
}
}
class MarcoTree extends JFrame {
public MarcoTree() {
// Configura la ventana principal
setBounds(0, 0, 400, 400);
setTitle("Tree");
setResizable(false);
setLocationRelativeTo(null);
// Añade el panel con el JTree y los botones
LaminaTree miLamina = new LaminaTree();
add(miLamina);
}
}
class LaminaTree extends JPanel {
private JTree tree;
private DefaultTreeModel model;
public LaminaTree() {
setLayout(new BorderLayout());
// Crear el nodo raíz y el modelo de árbol
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Raíz");
model = new DefaultTreeModel(root);
tree = new JTree(model);
// Panel del árbol
JPanel panelTree = new JPanel();
panelTree.add(tree);
// Panel de botones
JPanel panelBotones = new JPanel();
panelBotones.setLayout(new BoxLayout(panelBotones, BoxLayout.LINE_AXIS));
// Botones
JButton botonAnadir = crearBoton("Añadir", e -> anadirNodo());
JButton botonEliminar = crearBoton("Eliminar", e -> eliminarNodo());
JButton botonRenombrar = crearBoton("Renombrar", e -> renombrarNodo());
// Añade los botones al panel de botones
panelBotones.add(botonAnadir);
panelBotones.add(botonEliminar);
panelBotones.add(botonRenombrar);
// Añade los paneles a la disposición del BorderLayout
add(panelTree, BorderLayout.CENTER);
add(panelBotones, BorderLayout.SOUTH);
}
// Método para crear botones con un ActionListener
private JButton crearBoton(String texto, ActionListener accion) {
JButton boton = new JButton(texto);
boton.setFont(new Font(Font.SERIF, Font.BOLD, 16));
boton.setAlignmentX(Component.CENTER_ALIGNMENT);
boton.addActionListener(accion);
return boton;
}
// Método para añadir un nodo
private void anadirNodo() {
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
if (selectedNode == null) {
JOptionPane.showMessageDialog(null, "Por favor, selecciona un nodo para añadir un nuevo nodo.", "Error", JOptionPane.ERROR_MESSAGE);
return;
}
String nodeName = JOptionPane.showInputDialog("Introduce el nombre del nuevo nodo:");
if (nodeName != null && !nodeName.trim().isEmpty()) {
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(nodeName);
model.insertNodeInto(newNode, selectedNode, selectedNode.getChildCount());
// Expande el nodo para que el nuevo nodo sea visible
tree.expandPath(new TreePath(selectedNode.getPath()));
} else {
JOptionPane.showMessageDialog(null, "El nombre del nodo no puede estar vacío.", "Error", JOptionPane.ERROR_MESSAGE);
}
}
// Método para eliminar un nodo seleccionado
private void eliminarNodo() {
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
if (selectedNode == null) {
JOptionPane.showMessageDialog(null, "Por favor, selecciona un nodo para eliminar.", "Error", JOptionPane.ERROR_MESSAGE);
return;
}
if (selectedNode.getParent() == null) {
JOptionPane.showMessageDialog(null, "No puedes eliminar la raíz del árbol.", "Error", JOptionPane.ERROR_MESSAGE);
return;
}
int confirm = JOptionPane.showConfirmDialog(null, "¿Estás seguro de que deseas eliminar este nodo?", "Confirmar eliminación", JOptionPane.YES_NO_OPTION);
if (confirm == JOptionPane.YES_OPTION) {
model.removeNodeFromParent(selectedNode);
}
}
// Método para renombrar un nodo seleccionado
private void renombrarNodo() {
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
if (selectedNode == null) {
JOptionPane.showMessageDialog(null, "Por favor, selecciona un nodo para renombrar.", "Error", JOptionPane.ERROR_MESSAGE);
return;
}
String nuevoNombre = JOptionPane.showInputDialog(null, "Introduce el nuevo nombre:", "Renombrar Nodo", JOptionPane.PLAIN_MESSAGE);
if (nuevoNombre != null && !nuevoNombre.trim().isEmpty()) {
selectedNode.setUserObject(nuevoNombre);
model.nodeChanged(selectedNode);
} else {
JOptionPane.showMessageDialog(null, "El nombre no puede estar vacío.", "Error", JOptionPane.ERROR_MESSAGE);
}
}
}