我的场景中的ScrollEvent

时间:2016-07-09 10:04:22

标签: java javafx scrollbar

我更正了我的代码,现在它可以使用鼠标滚动,但我只能向下滚动。这是因为我已经设置了" 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);
                    }
                }
            });
        }
    });
}

1 个答案:

答案 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()方法上调用该方法。