【发布时间】:2016-03-10 16:45:11
【问题描述】:
首先,谁能给我解释一下,为什么我的MouseEvent 会被消耗掉,无论我选择哪个Alert-Option?我想这与在EventFilter 中调用Alert 有关,但我还不清楚。
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 不会被调用。任何人都可以解释为什么该复选框没有正确处理该事件?
其次,您将如何避免在基于用户的决策上检查蜜蜂的复选框?
【问题讨论】:
-
jdk1.8.0_66事件在这里没有被消费,onAction被调用 -
奇怪,我自己用的是
jdk1.8.0_66。 -
在 jdk1.8.0_71 上对我来说效果很好。
-
@crusam 顺便说一句 - 我正在使用 Fedora 23
-
感谢两位的反馈。我正在使用 Win7,我刚刚切换到最新的 JDK 版本(jdk1.8.0_74),它仍然不适合我。在这两种情况下都不会调用 setOnAction。
标签: validation javafx javafx-8 alert eventfilter