关于javafx 2:MouseEvent(JavaFX 2)未捕获双击

Double click is not being caught by OnMouseEvent (JavaFX2)

双击被捕获为单击:(

在FXML文件中:

1
<Button fx:id="A_button" onMouseClicked="#buttonAClicked">

在控制器中

1
2
3
4
5
6
7
8
9
10
private void buttonAClicked(MouseEvent mouseEvent) {
    if (mouseEvent.getButton().equals(MouseButton.PRIMARY)) {
        if (mouseEvent.getClickCount() == 2) {
            System.out.println("Double clicked A_button");
        }
        if (mouseEvent.getClickCount() == 1) {
            System.out.println("Single clicked A_button");
        }
    }
}

不幸的是,我发现双击没有被捕获-只有单击一次。在调试器中,单击Count为1。

更新:因为我不明白为什么它在JavaFX2.2.3-B05上不适合我,所以我做了一个变通方案,消除了双击的必要性。我在用户界面中添加了一个"加载"按钮。现在,用户必须单击并按下加载按钮。


它在javafx 2.2中被修复,请参见http://javafx-jira.kenai.com/browse/rt-19346

注意,双击将收到两个事件:

  • 使用getclickcount()=1单击鼠标
  • 使用getclickCount()=2单击鼠标

例如,如果运行下面的代码并双击按钮,输出将是:

1
2
clicks: 1
clicks: 2

代码(用2.2.4测试):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class DoubleClicks extends Application {
    @Override public void start(Stage stage) {
        Button btn = new Button();
        btn.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                System.out.println("clicks:" + event.getClickCount());
            }
        });

        stage.setScene(new Scene(new Group(btn), 300, 250));
        stage.setTitle(VersionInfo.getRuntimeVersion());
        stage.show();
    }

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