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走得太远了,加上它只更新一次因为它在一个按钮的事件处理程序中。
答案 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} } ScrollPane
或widthProperty
的{{1}},重新计算公式,并将Label
设置为公式的结果。
我不确定,但在您之前的代码中,似乎计算代码将在调整大小监听器中。处理属性时不需要这样做,因为只要依赖项发生更改,它们就会更新(请注意widthProperty
而不是translateXProperty
)。