我正在尝试通过代码滚动包含XYChart的ScrollPane
。
@FXML
private ScrollPane graphSP;
例如,将half-way point
滚动到此序列:
Stage stage = new Stage();
stage.show();
graphSP.setHvalue(.5);
问题是,如果我将调用发送到其他地方的setHvalue()
,它就什么都不做。
所以想知道,实际导致ScrollPane
滚动的限制是什么?或者,我在哪里可以在我的程序中调用setHvalue()
。
答案 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);
}
}