Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX:如何在滚动窗格中水平居中放置图像视图?_Javafx_Imageview_Scrollpane - Fatal编程技术网

JavaFX:如何在滚动窗格中水平居中放置图像视图?

JavaFX:如何在滚动窗格中水平居中放置图像视图?,javafx,imageview,scrollpane,Javafx,Imageview,Scrollpane,我在滚动窗格中设置了一个带有一些图像的ImageView,但是ImageView总是位于最左的角落。在这里,我试图手动抵消差异,但效果不好。ImageView过右,而且只更新一次,因为它位于按钮的eventhandler中 下面是一个使用标签而不需要侦听器的示例: viewScroll.setContent(new ImageView(bigimg)); double w = viewScroll.getContent().getBoundsInLocal().getWidth(); doubl

我在滚动窗格中设置了一个带有一些图像的ImageView,但是ImageView总是位于最左的角落。在这里,我试图手动抵消差异,但效果不好。ImageView过右,而且只更新一次,因为它位于按钮的eventhandler中

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

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();

我不确定您是否熟悉属性,但在上面的代码中,当我将
translateProperty
绑定到公式时,每当一个依赖项更改时,例如
滚动窗格的
宽度属性
标签的
宽度属性
,重新计算公式,并将
translateProperty
设置为公式的结果


我不确定,但在您以前的代码中,计算代码似乎位于resize侦听器中。在处理属性时,这不是必需的,因为当依赖项发生更改时属性会更新(请注意
bind()
而不是
set()
)。

如果属性小于
滚动窗格,为什么要将其放在
滚动窗格中?加载的图像可能大小不同,一旦我弄明白了这一点,我打算实现缩放和平移。试图通过viewScroll.getContent().getBoundsInLocal().getWidth()获取宽度时,由于某种原因返回0,这可能就是它走得如此之右的原因。啊,就是这样!我还发现使用BufferImage并通过SwingFXUtils转换为Image可以为ImageView提供适当的宽度。如果您不介意的话,可以解释一下为什么translateProperty()不会一直向右递增吗?我想我是在问,LayoutX和TranslateProperty之间的关系是什么?据我所知,将TranslateX设置为不同的值根本不会影响LayoutX,它只是在每次更改TranslateProperty的值时应用新的translate?
TranslateProperty
是对
layoutXProperty
的偏移。布局设置
layoutXProperty
,其他东西可以设置
translateXProperty
。我明白了,谢谢。你知道哪个属性决定了可滚动区域吗?如中所示,在其中滚动/平移内容的区域。我遇到一个问题,内容被推到可滚动区域之外并被切断。
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();
}