JavaFX ScrollBar setOnMousePressed无法正常工作

时间:2016-01-06 01:05:50

标签: java javafx

非常喜欢JavaFX,但遇到了这个问题,并想知道这是不是一个bug。

ScrollBar.setOnMousePressed()在使用处理程序初始化时似乎不会触发。下面的代码演示了这个问题: -

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ScrollBar;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Play extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    private static int cnt;

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Bug?");
        Button btn = new Button("This text will get replaced by the event handlers");

        ScrollBar scrollBar = new ScrollBar();

        // When pressing and releasing the ScrollBar thumb, we only get decrements
        // If you replace the ScrollBar with say a Button, then the code below works as you might expect.
        scrollBar.setOnMousePressed( event -> btn.setText("X" + cnt++));
        scrollBar.setOnMouseReleased( event -> btn.setText("X" + cnt--));

        VBox root = new VBox();
        root.getChildren().add(btn);
        root.getChildren().add(scrollBar);

        primaryStage.setScene(new Scene(root, 350, 250));
        primaryStage.show();
    }
}

注意,我在Microsoft Windows 10上运行JDK 1.8.0_66 64位。

1 个答案:

答案 0 :(得分:1)

James_D建议的一个简单的解决方法是使用EventFilters而不是setOnMousePressed(),如下所示: -

所以,

scrollBar.addEventFilter(MouseEvent.MOUSE_PRESSED,
            event -> btn.setText("X" + cnt++));

而不是

scrollBar.setOnMousePressed( event -> btn.setText("X" + cnt++));

我相信.setOnMousePressed()应该可以工作,但不会因为库中的错误而导致。我已经与oracle一起成长,并会在oracle澄清后更新答案。