public class UD02T03_ListadoTareas extends Application {

    private final ObservableList<Text> tareas = FXCollections.observableArrayList();
    
    @Override
    public void start(Stage stage) {

        // Campo de texto y botón "Agregar"
        TextField txtTarea = new TextField();
        txtTarea.setPromptText("Escribe una tarea...");
        txtTarea.setStyle(
                "-fx-background-radius: 10;"
                + "-fx-border-radius: 10;"
                + "-fx-border-color: #00A896;"
                + "-fx-padding: 4 8 4 8;"
        );
        txtTarea.prefWidth(200);

        Button btnAgregar = new Button("Agregar");
        btnAgregar.setStyle(
                "-fx-background-color: #00A896;"
                + "-fx-text-fill: white;"
                + "-fx-font-weight: bold;"
                + "-fx-background-radius: 10;"
                + "-fx-padding: 6 14 6 14;"
                + "-fx-cursor: hand;"
        );

        HBox superior = new HBox(10, txtTarea, btnAgregar);
        superior.setAlignment(Pos.CENTER_LEFT);

        // ListView de tareas
        ListView<Text> listaTareas = new ListView<>(tareas);
        listaTareas.setPrefHeight(250);
        listaTareas.setStyle(
                "-fx-background-color: #FFFFFF;"
                + "-fx-border-color: #00A896;"
                + "-fx-border-radius: 10;"
                + "-fx-background-radius: 10;"
        );

        // Botones inferiores: Eliminar, Terminada, Limpiar
        Button btnEliminar = new Button("Eliminar");
        btnEliminar.setStyle(
                "-fx-background-color: #F94144;"
                + "-fx-text-fill: white;"
                + "-fx-background-radius: 10;"
                + "-fx-padding: 6 14 6 14;"
                + "-fx-cursor: hand;"
        );

        Button btnTerminada = new Button("Terminada");
        btnTerminada.setStyle(
                "-fx-background-color: #F9C74F;"
                + "-fx-text-fill: #333333;"
                + "-fx-background-radius: 10;"
                + "-fx-padding: 6 14 6 14;"
                + "-fx-cursor: hand;"
                + "-fx-font-weight: bold;"
        );

        Button btnLimpiar = new Button("Limpiar");
        btnLimpiar.setStyle(
                "-fx-background-color: #577590;"
                + "-fx-text-fill: white;"
                + "-fx-background-radius: 10;"
                + "-fx-padding: 6 14 6 14;"
                + "-fx-cursor: hand;"
        );

        HBox botonesInferiores = new HBox(10, btnEliminar, btnTerminada, btnLimpiar);
        botonesInferiores.setAlignment(Pos.CENTER);

        // Contenedor principal
        VBox root = new VBox(15, superior, listaTareas, botonesInferiores);
        root.setPadding(new Insets(20));
        root.setStyle(
                "-fx-background-color: #C2F9ED;"
                + "-fx-background-radius: 0;"
        );

        // La acción del botón se ejecuta cada vez que se pulsa. 
        //Esto puede deberse a que el usuario haga clic en el botón con el ratón, 
        //a un evento táctil, a la pulsación de una tecla 
        //o a que el desarrollador invoque el método `fire()` mediante programación.
        btnAgregar.setOnAction(e -> {
            String texto = txtTarea.getText().trim();
            if (!texto.isEmpty()) {
                Text tarea = new Text(texto);
                tarea.setFont(Font.font("Comic Sans MS", 11));
                tarea.setStyle(
                        "-fx-text-fill: #000000;"
                        + "-fx-strikethrough: false;"
                        + "-fx-padding: 4 8 4 8;"
                );
                tareas.add(tarea);
                txtTarea.clear();
            }
        });

        //setOnAction() con un TextField se ejecuta cuando el usuario pulsa la tecla Intro.
        //fire() "ejecuta" mediante programación un evento sobre el objeto indicado.
        txtTarea.setOnAction(e -> btnAgregar.fire());
        
        /**Ejemplo con setOnKeyPressed()
        /*txtTarea.setOnKeyPressed(eh -> {
            if(eh.getCode().equals(KeyCode.ENTER)){
                btnAgregar.fire();
            }
        });*/

        btnEliminar.setOnAction(e -> {
            Integer indice = listaTareas.getSelectionModel().getSelectedIndex();
            if (indice >= 0) {
                tareas.remove((int) indice);
            }
            listaTareas.getSelectionModel().clearSelection();
        });

        btnTerminada.setOnAction(e -> {
            Integer indice = listaTareas.getSelectionModel().getSelectedIndex();
            if (indice >= 0) {
                Text tarea = tareas.get(indice);
                tarea.setStyle(tarea.getStyle().replace("-fx-strikethrough: false;", "-fx-strikethrough: true;"));
                //tarea.setStyle(tarea.getStyle().concat("-fx-strikethrough: true;"));

                listaTareas.getSelectionModel().clearSelection();
            }
        });

        btnLimpiar.setOnAction(e -> tareas.clear());

        Scene scene = new Scene(root, 500, 400);
        stage.setTitle("Listado de Tareas");
        stage.setScene(scene);
        stage.show();
    }

   
    public static void main(String[] args) {
        launch();
    }
}
Última modificación: domingo, 23 de novembro de 2025, 6:48 PM