簡體   English   中英

JavaFX-以編程方式滾動ScrollPane的約束

[英]JavaFX - Constraints in programmatically scrolling a ScrollPane

我試圖通過代碼滾動包含XYChart的ScrollPane

@FXML
private ScrollPane graphSP;

例如,將其滾動到half-way point可按以下順序進行:

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

問題是,如果我setHvalue()調用setHvalue()其他位置,則它什么都不做。

所以想知道,實際上使ScrollPane滾動的約束是什么? 或者,在哪里可以在程序中調用setHvalue()

您需要在可見的場景(即stage.isShowing()為true stage.isShowing()之后設置ScrollPane的Hvalue / 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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM