确实很喜欢JavaFX,但是遇到了这个问题,想知道这是否是一个错误。

使用处理程序初始化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位上运行。

最佳答案

根据James_D的建议,一种简单的解决方法是使用EventFilters代替setOnMousePressed(),如下所示:

所以,

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


代替

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


我相信.setOnMousePressed()应该可以工作,但不是因为库中的错误。我对oracle提出了意见,并且一旦oracle澄清了,便会更新答案。

关于java - JavaFX ScrollBar setOnMousePressed不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34624031/

10-10 12:46