// Importamos las clases necesarias
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.stage.Stage;

public class PanelControlUsuario extends Application {

    @Override
    public void start(Stage stage) {

        // Creamos el contenedor raíz: BorderPane (Top, Left, Center, Right, Bottom)
        BorderPane root = new BorderPane();

        // ------------------------------------------------------------
        // TOP: Barra superior con título + barra de menús en un HBox
        // ------------------------------------------------------------

        // Creamos etiqueta de título
        Label title = new Label("Panel de Control");
        title.setFont(new Font("Comic Sans MS", 22));
        title.setTextFill(Color.BLUE);


        // Creamos barra de menús
        MenuBar menuBar = new MenuBar(
            new Menu("Archivo"),
            new Menu("Editar"),
            new Menu("Ayuda")
        );

        // Contenedor horizontal para título + menús
        VBox topBar = new VBox(20, title, menuBar);
        topBar.setAlignment(Pos.CENTER);
        topBar.setPadding(new Insets(10, 16, 10, 16));
        //Rellena con un color de fondo sólido, sin bordes redondeados ni márgenes internos
        topBar.setBackground(new Background(new BackgroundFill(Color.web("#e8f0fe"), 
                CornerRadii.EMPTY, 
                Insets.EMPTY)));

       
        //topBar.getChildren().addAll(title, menuBar);

        // Insertamos la barra superior en TOP
        root.setTop(topBar);

        // ------------------------------------------------------------
        // LEFT: Panel de navegación (VBox con botones)
        // ------------------------------------------------------------

        // Creamos botones de navegación
        Button navInicio = new Button("Inicio");
        Button navPerfil = new Button("Perfil");
        Button navConfig = new Button("Configuración");
        Button navSalir  = new Button("Salir");

        // Ajustamos tamaños preferidos
        navInicio.setPrefWidth(140);
        navPerfil.setPrefWidth(140);
        navConfig.setPrefWidth(140);
        navSalir.setPrefWidth(140);

        // VBox lateral
        VBox leftNav = new VBox(10);
        leftNav.setAlignment(Pos.TOP_CENTER);
        leftNav.setPadding(new Insets(12));
        leftNav.getChildren().addAll(navInicio, navPerfil, navConfig, navSalir);
        Background fondo = new Background(new BackgroundFill(Color.LIGHTGREY, new CornerRadii(20) , Insets.EMPTY)); 
        leftNav.setBackground(fondo);
//leftNav.setBackground(new Background(new BackgroundFill(Color.LIGHTGREY, new CornerRadii(20) , Insets.EMPTY)));
        leftNav.setBorder(new Border(new BorderStroke(
            Color.GREY, BorderStrokeStyle.DOTTED, CornerRadii.EMPTY, new BorderWidths(0,3,0,0)
        )));

        // Insertamos el panel de navegación en LEFT
        root.setLeft(leftNav);

        // ------------------------------------------------------------
        // CENTER: Formulario en GridPane (Nombre, Correo, Teléfono, País, Comentarios)
        // ------------------------------------------------------------

        // Etiquetas y campos
        Label lblNombre  = new Label("Nombre:");
        TextField tfNombre = new TextField();
        Label lblCorreo  = new Label("Correo:");
        TextField tfCorreo = new TextField();
        Label lblTel     = new Label("Teléfono:");
        TextField tfTel   = new TextField();

        // Selector de país
        Label lblPais = new Label("País:");
        ComboBox<String> cbPais = new ComboBox<>();
        cbPais.getItems().addAll("España", "México", "Argentina", "Chile", "Colombia");
        cbPais.setPrefWidth(200);

        // Área de comentarios
        Label lblComentarios = new Label("Comentarios:");
        TextArea taComentarios = new TextArea();
        taComentarios.setPrefRowCount(4);

        // GridPane para organizar el formulario
        GridPane form = new GridPane();
        form.setHgap(12);
        form.setVgap(10);
        form.setPadding(new Insets(16));
        form.setBackground(new Background(new BackgroundFill(Color.web("#ffffff"), new CornerRadii(8), Insets.EMPTY)));
        form.setBorder(new Border(new BorderStroke(
            Color.web("#e5eaf3"), BorderStrokeStyle.SOLID, new CornerRadii(8), new BorderWidths(1)
        )));

        // Añadimos componentes al GridPane: add(node, col, row)
        form.add(lblNombre,      0, 0); form.add(tfNombre,      1, 0);
        form.add(lblCorreo,      0, 1); form.add(tfCorreo,      1, 1);
        form.add(lblTel,         0, 2); form.add(tfTel,         1, 2);
        form.add(lblPais,        0, 3); form.add(cbPais,        1, 3);
        form.add(lblComentarios, 0, 4); form.add(taComentarios, 1, 4);

        // Permitimos que la columna 1 crezca (campos)
        ColumnConstraints c0 = new ColumnConstraints();
        c0.setMinWidth(100);
        ColumnConstraints c1 = new ColumnConstraints();
        c1.setHgrow(Priority.ALWAYS);
        form.getColumnConstraints().addAll(c0, c1);

        // Insertamos el GridPane en CENTER
        root.setCenter(form);

        // ------------------------------------------------------------
        // RIGHT: Acciones rápidas en FlowPane (botones sin funcionalidad)
        // ------------------------------------------------------------

        // Botones de acciones
        Button btnGuardar   = new Button("Guardar");
        Button btnActualizar= new Button("Actualizar");
        Button btnEliminar  = new Button("Eliminar");
        Button btnExportar  = new Button("Exportar");

        // FlowPane para disponerlos fluyendo
        FlowPane quickActions = new FlowPane();
        quickActions.setHgap(10);
        quickActions.setVgap(10);
        quickActions.setPadding(new Insets(12));
        quickActions.setAlignment(Pos.TOP_CENTER);
        quickActions.setPrefWidth(150);
        quickActions.setBackground(fondo);
        quickActions.setBorder(new Border(new BorderStroke(
            Color.GREY, BorderStrokeStyle.DOTTED, CornerRadii.EMPTY, new BorderWidths(0,0,0,3)
        )));

        // Añadimos los botones al FlowPane
        quickActions.getChildren().addAll(btnGuardar, btnActualizar, btnEliminar, btnExportar);

        // Insertamos el FlowPane en RIGHT
        root.setRight(quickActions);

        // ------------------------------------------------------------
        // BOTTOM: Barra de estado en HBox
        // ------------------------------------------------------------

        // Etiqueta de estado
        Label status = new Label("Versión 1.0  |  Usuario activo");
        status.setTextFill(Color.web("#444"));

        // Barra inferior
        HBox statusBar = new HBox();
        statusBar.setAlignment(Pos.CENTER);
        statusBar.setPadding(new Insets(8));
        statusBar.setBackground(new Background(new BackgroundFill(Color.web("#eef3ff"), CornerRadii.EMPTY, Insets.EMPTY)));
        statusBar.getChildren().add(status);

        // Insertamos la barra inferior en BOTTOM
        root.setBottom(statusBar);

        // ------------------------------------------------------------
        // Escena y Stage
        // ------------------------------------------------------------

        // Creamos la escena con tamaño inicial
        Scene scene = new Scene(root, 900, 560);

        // Configuramos el Stage (ventana)
        stage.setTitle("Panel de Control de Usuario");
        stage.setScene(scene);
        stage.show();
    }

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

Última modificación: domingo, 23 de novembro de 2025, 6:45 PM