Saltar la navegación

Elige las imágenes a mostrar

Esta aplicación es parecida a las anteriores, pero utiliza casillas de verificación para indicar las imágenes a mostrar. En este caso las opciones no son excluyentes, por lo que podemos mostrar todas las imágenes, algunas o ninguna.

En este caso hemos vuelto a utilizar el método setOnAction de cada casilla de verificación para registrar el manejador y hemos utilizado un sólo manejador en el que distinguimos el origen del evento.

La interfaz de la aplicación es la que se muestra a continuación.

El código asociado es el que sigue.

package javafx.eventos;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.recursos.LocalizadorRecursos;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;

public class SeleccionCasillaVerificacion extends Application {
	
	private CheckBox cbCerveza;
	private CheckBox cbCaca;
	private CheckBox cbApagar;
	private ImageView ivCerveza;
	private ImageView ivCaca;
	private ImageView ivApagar;
	
	private static final Image CERVEZA = new Image(LocalizadorRecursos.class.getResourceAsStream("imagenes/iconoCerveza.png"), 100, 100, true, true);
	private static final Image CACA = new Image(LocalizadorRecursos.class.getResourceAsStream("imagenes/iconoCaca.png"), 100, 100, true, true);
	private static final Image APAGAR = new Image(LocalizadorRecursos.class.getResourceAsStream("imagenes/iconoApagar.png"), 100, 100, true, true);
	
	private void mostrarIconos(ActionEvent e) {
		CheckBox pulsado = (CheckBox)e.getSource();
		ImageView ivDestino = null;
		Image imgDestino = null;
		if (pulsado == cbCerveza) {
			ivDestino = ivCerveza;
			imgDestino = CERVEZA;
		} else if (pulsado == cbCaca) {
			ivDestino = ivCaca;
			imgDestino = CACA;
		} else if (pulsado == cbApagar) {
			ivDestino = ivApagar;
			imgDestino = APAGAR;
		}
		if (ivDestino != null) {
			ivDestino.setImage(pulsado.isSelected() ? imgDestino : null);
		}
	}

	@Override
	public void start(Stage escenarioPrincipal) {
		try {
			HBox raiz = new HBox(20);
			raiz.setPadding(new Insets(20));
			raiz.setAlignment(Pos.CENTER_LEFT);
			
			VBox vbOpciones =new VBox(15);
			vbOpciones.setPadding(new Insets(10));
			
			Label lbElige = new Label("Elige los iconos a mostrar:");
			lbElige.setFont(Font.font(20));
			cbCerveza = new CheckBox("Cerveza");
			cbCerveza.setOnAction(this::mostrarIconos);
			cbCaca = new CheckBox("Caca");
			cbCaca.setOnAction(this::mostrarIconos);
			cbApagar = new CheckBox("Apagar");
			cbApagar.setOnAction(this::mostrarIconos);
			Insets margen = new Insets(0, 0, 0, 20);
			VBox.setMargin(cbCerveza, margen);
			VBox.setMargin(cbCaca, margen);
			VBox.setMargin(cbApagar, margen);
			vbOpciones.getChildren().addAll(lbElige, cbCerveza, cbCaca, cbApagar);
			
			VBox vbIconos = new VBox(5);
			vbIconos.setPadding(new Insets(5));
			vbIconos.setStyle("-fx-border-color: blue; "
					+ "-fx-border-radius: 10; "
					+ "-fx-background-color: #cce6ff;"
					+ "-fx-background-radius: 10");
			ivCerveza = new ImageView();
			ivCerveza.setFitHeight(50);
			ivCerveza.setFitWidth(50);
			ivCaca = new ImageView();
			ivCaca.setFitHeight(50);
			ivCaca.setFitWidth(50);
			ivApagar = new ImageView();
			ivApagar.setFitHeight(50);
			ivApagar.setFitWidth(50);
			vbIconos.getChildren().addAll(ivCerveza, ivCaca, ivApagar);
			
			raiz.getChildren().addAll(vbOpciones, vbIconos);
			
			Scene escena = new Scene(raiz, 420, 200);
			escenarioPrincipal.setTitle("Elige un icono");
			escenarioPrincipal.setScene(escena);
			escenarioPrincipal.show();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}

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