Consumir eventos con EventFilters
Primero, ¿alguien puede explicarme por qué miMouseEvent
se consume sin importar cuálAlert
-Opción que elijo? Supongo que tiene algo que ver con llamar a unAlert
dentro de unEventFilter
, pero eso aún no está claro para mí.
public class EventFilterConsumeErrorExample extends Application
{
@Override
public void start( final Stage primaryStage )
{
final CheckBox checkBox = new CheckBox( "Check me!" );
checkBox.setOnAction( ( event ) ->
{
System.out.println( "onAction: " + checkBox.isSelected() );
} );
checkBox.addEventFilter( MouseEvent.MOUSE_RELEASED, ( event ) ->
{
System.out.println( "onFilter" );
final Alert alert = new Alert( AlertType.CONFIRMATION, "Do you wonna consume this Event?" );
if ( alert.showAndWait().get().equals( ButtonType.OK ) )
{
System.out.println( "Yes, consume Event" );
event.consume();
}
else
{
System.out.println( "No, do NOT consume Event" );
//<-- Why is the Event consumed anyway? onAction won´t be called.
}
} );
final BorderPane root = new BorderPane( checkBox );
final Scene scene = new Scene( root, 400, 400 );
primaryStage.setScene( scene );
primaryStage.show();
}
public static void main( final String[] args )
{
System.out.println( "Java Version " + System.getProperties().get( "javafx.runtime.version" ) );
launch( args );
}
}
El programa genera el siguiente resultado, después de hacer clic en la casilla de verificación dos veces y hacer clic en cada decisión de diálogo una vez:
Versión de Java 8.0.72-b15
onFilter
Sí, consumir evento
onFilter
No, NO consumas Evento
En ambos casos, la casilla de verificación no cambia su estado,onAction
No se llama. ¿Alguien puede explicar por qué la casilla de verificación no maneja adecuadamente el evento?
En segundo lugar, ¿cómo evitaría que se marque la casilla de verificación de una decisión basada en el usuario?