javafx tableview 中禁用鼠标滑轮事件,怎么实现?
找到一个setOnScroll 方法但是不生效~~
如果你想在JavaFX TableView中禁用鼠标滑轮事件,可以使用以下两种方法之一:
通过在TableView上添加一个事件过滤器来阻止滚动事件的传递:
java
tableView.addEventFilter(ScrollEvent.ANY, e -> e.consume());
通过从TableView的Skin中获取它的ScrollPane并禁用它的滚动条来实现:
java
tableView.skinProperty().addListener((obs, oldSkin, newSkin) -> {
if (newSkin != null) {
ScrollPane scrollPane = (ScrollPane) newSkin.getChildren().get(0);
scrollPane.setVbarPolicy(ScrollBarPolicy.NEVER);
scrollPane.setHbarPolicy(ScrollBarPolicy.NEVER);
}
});
第一种方法是将一个事件过滤器添加到TableView上,当滚动事件被触发时,该事件过滤器会截获它并将其消耗掉。这意味着滚动事件不会再向下传递给子节点。
第二种方法是从TableView的皮肤中获取到它内部的ScrollPane,然后禁用垂直和水平滚动条。这将防止用户使用鼠标滚轮来滚动TableView,但是你仍然可以以编程方式滚动TableView。
你可能已经尝试了第一种方法,但它不起作用的原因可能是因为有其他的事件监听器与此冲突了。你可以通过把setOnScroll()方法置为空来禁用它。但是,这种方法不太可靠,并且在使用了多个ScrollPane的情况下可能会出现问题。建议使用上述其中一种方法进行禁用。