JavaFX:如何在 ScrollPane 中水平居中 ImageView?

JavaFX: How can I horizontally center an ImageView inside a ScrollPane?

viewScroll.setContent(new ImageView(bigimg));
double w = viewScroll.getContent().getBoundsInLocal().getWidth();
double vw = viewScroll.getViewportBounds().getWidth();

viewScroll.getContent().setTranslateX((vw/2)-(w/2));

viewScroll.toFront();

我在 ScrollPane 中设置了一个带有一些图像的 ImageView,但 ImageView 总是位于最左角。在这里,我试图手动抵消差异,但效果不佳。 ImageView 太靠右了,而且它只更新一次,因为它在按钮的事件处理程序中。

下面是一个使用标签而不需要监听器的例子:

public void start(Stage primaryStage) throws Exception {
    ScrollPane scrollPane = new ScrollPane();
    Label label = new Label("Hello!");
    label.translateXProperty().bind(scrollPane.widthProperty().subtract(label.widthProperty()).divide(2));
    scrollPane.setContent(label);
    Scene scene = new Scene(scrollPane);
    primaryStage.setScene(scene);
    primaryStage.setWidth(200);
    primaryStage.setHeight(200);
    primaryStage.show();
}

我不确定你是否熟悉属性,但在上面的代码中,当我将 translateXProperty 绑定到公式时,每次依赖项之一发生变化,例如 ScrollPanewidthPropertyLabelwidthProperty,重新计算公式,并将translateXProperty设置为公式的结果。

我不确定,但在您之前的代码中,计算代码似乎在调整大小侦听器中。这在处理属性时不是必需的,因为它们会在依赖项更改时更新(注意 bind() 而不是 set())。