我更正了我的代码,现在它可以使用鼠标滚动,但我只能向下滚动。这是因为我已经设置了" val + = sb.getUnitIncrement()"所以我想插入一个条件来检测我是否向上或向下滚动,如果我向上滚动" val - = sb.unitIncrement()"。问题是我无法找到这种方法。我该怎么用?
private double val = 0;
@FXML
private Button back;
@FXML
private AnchorPane Instructions;
@FXML
private ImageView image;
@FXML
private ScrollBar sb;
private void scroll() {
sb.sceneProperty().addListener((ObservableValue<? extends Scene> observable, Scene oldValue, Scene newValue) -> {
if (newValue != null) {
sb.getScene().setOnScroll((ScrollEvent event) -> {
if (val < sb.getMax()) {
val += sb.getUnitIncrement();
image.setLayoutY(-val);
if (val < sb.getMax() - sb.getUnitIncrement()) {
back.setVisible(false);
} else if (val >= sb.getMax() - sb.getUnitIncrement()) {
back.setVisible(true);
}
}
});
}
});
}
答案 0 :(得分:0)
我同意DVarga,如果你使用ScrollPane
会更容易。修改您的FXML文件,删除ScrollBar
并添加ScrollPane
。然后尝试使用此代码:
@FXML
private ImageView image;
@FXML
private Button back;
@FXML
private AnchorPane Instructions;
@FXML
private ScrollPane sp;
private void setScrollPane() {
sp.setContent(image);
sp.setHbarPolicy(ScrollBarPolicy.NEVER);
sp.setVbarPolicy(ScrollBarPolicy.ALWAYS);
sp.setFitToWidth(true);
sp.setFitToHeight(true);
sp.vvalueProperty().addListener((ObservableValue<? extends Number> ov, Number old_val, Number new_val) -> {
if (new_val.doubleValue() >= sp.getVmax()) {
back.setVisible(true);
}
if (new_val.doubleValue() < sp.getVmax()) {
back.setVisible(false);
}
});
}
因为您只使用垂直滚动条,我认为您不需要水平条,我还假设您希望在图像末尾显示按钮。
在控制器的initialize()
方法上调用该方法。