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

时间:2015-06-14 00:13:10

标签: javafx imageview 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中设置了带有一些Image的ImageView,但ImageView总是转到最左边的角落。在这里,我试图手动抵消差异,但它不能很好地工作。 ImageView走得太远了,加上它只更新一次因为它在一个按钮的事件处理程序中。

1 个答案:

答案 0 :(得分:2)

以下是使用标签而不需要侦听器的示例:

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绑定到公式时,每次其中一个依赖项发生更改时,例如{{1} } ScrollPanewidthProperty的{​​{1}},重新计算公式,并将Label设置为公式的结果。

我不确定,但在您之前的代码中,似乎计算代码将在调整大小监听器中。处理属性时不需要这样做,因为只要依赖项发生更改,它们就会更新(请注意widthProperty而不是translateXProperty)。