确实很喜欢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/