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
绑定到公式时,每次依赖项之一发生变化,例如 ScrollPane
的widthProperty
或Label
的widthProperty
,重新计算公式,并将translateXProperty
设置为公式的结果。
我不确定,但在您之前的代码中,计算代码似乎在调整大小侦听器中。这在处理属性时不是必需的,因为它们会在依赖项更改时更新(注意 bind()
而不是 set()
)。
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
绑定到公式时,每次依赖项之一发生变化,例如 ScrollPane
的widthProperty
或Label
的widthProperty
,重新计算公式,并将translateXProperty
设置为公式的结果。
我不确定,但在您之前的代码中,计算代码似乎在调整大小侦听器中。这在处理属性时不是必需的,因为它们会在依赖项更改时更新(注意 bind()
而不是 set()
)。