En este artículo, aprenderemos a crear una aplicación en JavaFX que permite gestionar clientes y proveedores (de segunda mano y de primera mano) en una librería. La aplicación incluirá una barra de menú, un ChoiceBox para seleccionar clientes, y un TabPane para mostrar y editar información sobre proveedores. La aplicación también contará con un diseño modular y un código bien comentado para facilitar su mantenimiento y comprensión.
Requisitos del Ejercicio
Características de la Aplicación
- Menú:
- Archivo:
- Cargar
- Salir
- Proveedores:
- Mostrar Datos
- Clientes:
- Eliminar
- Cargar
- Contenido Principal:
- ChoiceBox para seleccionar clientes.
- TabPane debajo del ChoiceBox.
- Pestaña «Lista de Proveedores» con un listado de proveedores y un botón «Editar» para cada proveedor.
- Pestaña «Editar Proveedor» que carga los datos del proveedor seleccionado en un formulario.
Funcionalidades del Menú
- Archivo -> Cargar: Carga la lista de clientes en el ChoiceBox.
- Archivo -> Salir: Cierra la aplicación.
- Proveedores -> Mostrar Datos: Abre una ventana para seleccionar un proveedor y mostrar sus datos.
- Clientes -> Eliminar: Elimina el cliente seleccionado del ChoiceBox.
Código Modular y Comentado
A continuación, se presenta el código fuente para la aplicación JavaFX con las características descritas.
Código Fuente de la Aplicación
Main.java
package libreria.gestion;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class Main extends Application {
private ChoiceBox<String> customerChoiceBox;
private TabPane tabPane;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Gestión de Clientes y Proveedores en Librería");
BorderPane root = new BorderPane();
Scene scene = new Scene(root, 800, 600);
// Barra de menú
MenuBar menuBar = createMenuBar(primaryStage);
// ChoiceBox para clientes
customerChoiceBox = new ChoiceBox<>();
Label customerLabel = new Label("Cliente:");
BorderPane topPane = new BorderPane();
topPane.setLeft(customerLabel);
topPane.setCenter(customerChoiceBox);
// TabPane
tabPane = new TabPane();
root.setTop(menuBar);
root.setCenter(tabPane);
root.setBottom(topPane);
primaryStage.setScene(scene);
primaryStage.show();
}
private MenuBar createMenuBar(Stage primaryStage) {
MenuBar menuBar = new MenuBar();
Menu fileMenu = new Menu("Archivo");
MenuItem loadItem = new MenuItem("Cargar");
MenuItem exitItem = new MenuItem("Salir");
fileMenu.getItems().addAll(loadItem, exitItem);
Menu supplierMenu = new Menu("Proveedores");
MenuItem showDataItem = new MenuItem("Mostrar Datos");
supplierMenu.getItems().add(showDataItem);
Menu customerMenu = new Menu("Clientes");
MenuItem deleteItem = new MenuItem("Eliminar");
MenuItem loadCustomerItem = new MenuItem("Cargar");
customerMenu.getItems().addAll(deleteItem, loadCustomerItem);
menuBar.getMenus().addAll(fileMenu, supplierMenu, customerMenu);
// Eventos de los menús
loadItem.setOnAction(event -> loadCustomers());
exitItem.setOnAction(event -> primaryStage.close());
showDataItem.setOnAction(event -> showSupplierData());
deleteItem.setOnAction(event -> deleteCustomer());
loadCustomerItem.setOnAction(event -> loadCustomers());
return menuBar;
}
private void loadCustomers() {
// Borrar la lista actual de clientes
customerChoiceBox.getItems().clear();
// Aquí cargarías la lista de clientes desde una BD o una lista.
customerChoiceBox.getItems().addAll("Cliente 1", "Cliente 2", "Cliente 3", "Cliente 4");
}
private void deleteCustomer() {
// Eliminar el cliente seleccionado
String selectedCustomer = customerChoiceBox.getSelectionModel().getSelectedItem();
if (selectedCustomer != null) {
customerChoiceBox.getItems().remove(selectedCustomer);
}
}
private void showSupplierData() {
// Mostrar datos de un proveedor
Stage supplierStage = new Stage();
supplierStage.setTitle("Mostrar Datos de Proveedor");
BorderPane supplierPane = new BorderPane();
Scene supplierScene = new Scene(supplierPane, 300, 200);
ChoiceBox<String> supplierChoiceBox = new ChoiceBox<>();
supplierChoiceBox.getItems().addAll("Proveedor 1", "Proveedor 2", "Proveedor 3");
Button showButton = new Button("Mostrar");
Label supplierDataLabel = new Label();
showButton.setOnAction(event -> {
String selectedSupplier = supplierChoiceBox.getSelectionModel().getSelectedItem();
if (selectedSupplier != null) {
supplierDataLabel.setText("Datos del " + selectedSupplier); // Aquí cargarías los datos reales
}
});
supplierPane.setTop(supplierChoiceBox);
supplierPane.setCenter(showButton);
supplierPane.setBottom(supplierDataLabel);
supplierStage.setScene(supplierScene);
supplierStage.show();
}
}
SupplierTab.java
package libreria.gestion;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.layout.VBox;
public class SupplierTab extends Tab {
public SupplierTab() {
setText("Lista de Proveedores");
VBox vbox = new VBox();
for (int i = 1; i <= 5; i++) {
final int supplierNumber = i; // Variable temporal
Label supplierLabel = new Label("Proveedor " + supplierNumber);
Button editButton = new Button("Editar");
editButton.setOnAction(event -> editSupplier("Proveedor " + supplierNumber));
vbox.getChildren().addAll(supplierLabel, editButton);
}
setContent(vbox);
}
private void editSupplier(String supplierName) {
// Crear una nueva pestaña para editar el proveedor
Tab editTab = new Tab("Editar " + supplierName);
VBox editBox = new VBox();
Label nameLabel = new Label("Nombre: " + supplierName);
Label infoLabel = new Label("Información adicional..."); // Aquí cargarías los datos reales
editBox.getChildren().addAll(nameLabel, infoLabel);
editTab.setContent(editBox);
((TabPane) getTabPane()).getTabs().add(editTab);
}
}
Pantallazos de la Aplicación
- Pantalla Principal: Mostrando el menú y el ChoiceBox de clientes.
- Menú Archivo -> Cargar: ChoiceBox cargado con clientes.
- Menú Proveedores -> Mostrar Datos: Ventana con datos del proveedor seleccionado.
- Pestaña «Lista de Proveedores»: Lista de proveedores con botones «Editar».
- Pestaña «Editar Proveedor»: Formulario para editar los datos del proveedor seleccionado.
Conclusión
Este ejercicio de JavaFX demuestra cómo estructurar una aplicación con menús y un contenido principal dinámico para gestionar clientes y proveedores en una librería. La limpieza, el orden y la optimización del código son esenciales para la mantenibilidad y escalabilidad de la aplicación. Utilizar nombres de variables y funciones adecuados, además de código modular y comentado, facilita el entendimiento y la colaboración en proyectos de desarrollo.