Java 在我的现场滚动事件

Java 在我的现场滚动事件,java,javafx,scrollbar,Java,Javafx,Scrollbar,我更正了我的代码,现在它可以与鼠标的滚动,但我只能向下滚动。这是因为我设置了“val+=sb.getUnitIncrement()”,所以我想插入一个条件来检测我是否向上或向下滚动以及是否向上滚动“val-=sb.unitIncrement()”。问题是我找不到那种方法。我应该用什么 private double val = 0; @FXML private Button back; @FXML private AnchorPane Instructions; @FXML private

我更正了我的代码,现在它可以与鼠标的滚动,但我只能向下滚动。这是因为我设置了“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);
                    }
                }
            });
        }
    });
}
private double val=0;
@FXML
私人按钮返回;
@FXML
私人锚烷说明书;
@FXML
私有图像查看图像;
@FXML
私人滚动条;
私有无效卷轴(){

sb.sceneProperty().addListener((observeValue我同意DVarga,如果使用
滚动窗格
,会更容易。修改FXML文件,删除
滚动条
,并添加
滚动窗格
。然后尝试使用以下代码:

@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);
        }
    });        
}
@FXML
私有图像查看图像;
@FXML
私人按钮返回;
@FXML
私人锚烷说明书;
@FXML
私人滚动窗格sp;
私有void setScrollPane(){
sp.setContent(图像);
sp.setHbarPolicy(ScrollBarPolicy.NEVER);
sp.setVbarPolicy(ScrollBarPolicy.ALWAYS);
sp.setFitToWidth(真);
sp.setFitToHeight(真);

sp.vvalueProperty().addListener((observeValueValue我同意DVarga,如果使用
滚动窗格
,会更容易。修改FXML文件,删除
滚动条
,并添加
滚动窗格
。然后尝试使用此代码:

@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);
        }
    });        
}
@FXML
私有图像查看图像;
@FXML
私人按钮返回;
@FXML
私人锚烷说明书;
@FXML
私人滚动窗格sp;
私有void setScrollPane(){
sp.setContent(图像);
sp.setHbarPolicy(ScrollBarPolicy.NEVER);
sp.setVbarPolicy(ScrollBarPolicy.ALWAYS);
sp.setFitToWidth(真);
sp.setFitToHeight(真);

sp.vvalueProperty().addListener((ObservableValueIn
scroll()
您设置要调用
moveImage()的阶段的
setOnScroll
滚动。然后在
moveImage
中,您一次又一次地添加一个侦听器……我已经更新了问题,将图像放入
滚动窗格
并让它为您完成任务不是更容易吗?在
scroll()
中,您可以将stage的
setOnScroll
设置为调用
moveImage()
滚动。然后在
moveImage
中,您一次又一次地添加一个侦听器……我已经更新了问题,将图像放入
滚动窗格
并让它为您完成任务不是更容易吗?