Saltar la navegación

¿Qué opción hemos escojido de una caja de elección?

El siguiente ejemplo muestra una aplicación muy parecida a la anterior pero que, en vez de utilizar radio botones para seleccionar la imagen a mostrar, utiliza una caja de elección.

En esta aplicación registramos un ChangeListener para el modelo asociado a la caja de elección (aunque también lo podría haber hecho registrando un manejador para el ActionEvent de la caja de elección).

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

El código asociado a la misma es el siguiente.

package javafx.eventos;

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.recursos.LocalizadorRecursos;
import javafx.scene.Scene;
import javafx.scene.control.ChoiceBox;
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 SeleccionCajaEleccion extends Application {
	
	private ChoiceBox<String> cbOpciones;
	private ImageView ivIcono;
	
	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 mostrarIcono() {
		String seleccion = cbOpciones.valueProperty().getValue();
		if (seleccion.equals("Cerveza")) {
			ivIcono.setImage(CERVEZA);
		} else if (seleccion.equals("Caca")) {
			ivIcono.setImage(CACA);
		} else if (seleccion.equals("Apagar")) {
			ivIcono.setImage(APAGAR);
		}
	}

	@Override
	public void start(Stage escenarioPrincipal) {
		try {
			VBox raiz = new VBox(20);
			raiz.setPadding(new Insets(20));
			raiz.setAlignment(Pos.CENTER);
			
			HBox hbOpciones =new HBox(10);
			raiz.setAlignment(Pos.TOP_CENTER);
			hbOpciones.setPadding(new Insets(10));
			
			Label lbElige = new Label("Elige el icono a mostrar:");
			lbElige.setFont(Font.font(20));
			cbOpciones = new ChoiceBox<>(FXCollections.observableArrayList("Cerveza", "Caca", "Apagar"));
			cbOpciones.getSelectionModel().select("Caca");
			cbOpciones.valueProperty().addListener((observable, oldValue, newValue) -> mostrarIcono());
			hbOpciones.getChildren().addAll(lbElige, cbOpciones);
			
			ivIcono = new ImageView();
			ivIcono.setImage(CACA);
			
			raiz.getChildren().addAll(hbOpciones, ivIcono);
			
			Scene escena = new Scene(raiz, 430, 220);
			escenarioPrincipal.setTitle("Elige un icono");
			escenarioPrincipal.setScene(escena);
			escenarioPrincipal.show();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}

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