JavaFX - 以编程方式滚动ScrollPane的约束

时间:2015-04-06 15:37:09

标签: java javafx

我正在尝试通过代码滚动包含XYChart的ScrollPane

@FXML
private ScrollPane graphSP;

例如,将half-way point滚动到此序列:

Stage stage = new Stage();
stage.show();
graphSP.setHvalue(.5);

问题是,如果我将调用发送到其他地方的setHvalue(),它就什么都不做。

所以想知道,实际导致ScrollPane滚动的限制是什么?或者,我在哪里可以在我的程序中调用setHvalue()

1 个答案:

答案 0 :(得分:0)

您需要在场景可见后设置ScrollPane的Hvalue / Vvalue,即stage.isShowing()为真。

修改

调用它的一种方法是调用stage.show()之后。

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        LineChart<Number, Number> chart = new LineChart<>(new NumberAxis(), new NumberAxis());
        ScrollPane scrollPane = new ScrollPane(chart);
        primaryStage.setScene(new Scene(scrollPane, 300, 300));
        primaryStage.show();
        scrollPane.setVvalue(0.5);
        scrollPane.setHvalue(0.5);
    }

    public static void main(String[] args) {
        launch(args);
    }
}

但是,可能存在无法提供舞台的情况。在这种情况下,您可以使用以下内容:

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        LineChart<Number, Number> chart = new LineChart<>(new NumberAxis(), new NumberAxis());
        ScrollPane scrollPane = new ScrollPane(chart);
        primaryStage.setScene(new Scene(scrollPane, 300, 300));

        scrollPane.getScene().getWindow().showingProperty().addListener((observable, oldValue, newValue) -> {
            if (newValue) {
                scrollPane.setVvalue(0.5);
                scrollPane.setHvalue(0.5);
            }
        });
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}