Использование событий с помощью EventFilters
Во-первых, кто-нибудь может мне объяснить, почему мойMouseEvent
потребляется независимо от того, какойAlert
-Опции я выбираю? Я думаю, это как-то связано с вызовомAlert
в пределахEventFilter
, но это просто еще не ясно для меня.
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 );
}
}
Программа генерирует следующие выходные данные, дважды щелкнув флажок и один раз щелкнув каждое диалоговое решение:
Версия Java 8.0.72-b15
onFilter
Да, потреблять событие
onFilter
Нет, не потреблять событие
В обоих случаях флажок не меняет своего состояния,onAction
не называется. Кто-нибудь может объяснить, почему событие не правильно обрабатывается флажком?
Во-вторых, как бы вы не отметили флажок проверки на основе решения пользователя?