使用JavaFX居中ImageView

4

我正在尝试在JavaFX GUI中居中一个ImageView。然而,图片只出现在窗口的左上角。 我的代码:

FlowPane picPane = new FlowPane();
Image photo = new Image(url, 300, 300, false, false);
ImageView myView = new ImageView(photo);
picPane.getChildren().add(myView);
picPane.setColumnHalignment(HPos.CENTER);

2
教程概述了所有布局面板。在这里,FlowPane可能不是您需要的。 - James_D
3个回答

1

对于水平流布局(默认设置),属性“columnHalignment”将被忽略。

请查看HBox布局。在那里,您可以正确指定对齐方式。

编辑:一些代码:

public HBox addHBox(URL url) {
    HBox hbox = new HBox();
    hbox.setPadding(new Insets(15, 12, 15, 12));
    hbox.setSpacing(10);
    hbox.setStyle("-fx-background-color: #336699;");
    hbox.setAlignment(Pos.TOP_CENTER);

    Image photo = new Image(url, 300, 300, false, false);
    ImageView myView = new ImageView(photo);

    hbox.getChildren().add(myView);

    return hbox;
}

非常抱歉,目前我无法进行测试。但是它应该可以这样工作。


1
@StackOverflown 添加了一些代码。我目前无法测试这段代码,非常抱歉。请尝试运行它,如果不起作用,请随时在此处发表评论。稍后我会查看它。 - Joshua K

0

这是我找到的最简单的解决方案。

Image img = new Image( "file:"+ imgURL );                
imgViewer.setImage(img);
centerImage(imgViewer); // this does the centering..


public static void centerImage(ImageView imgView) {
        Image img = imgView.getImage();

        if (img != null) {
            double w = 0;
            double h = 0;

            double ratioX = imgView.getFitWidth() / img.getWidth();
            double ratioY = imgView.getFitHeight() / img.getHeight();

            double reducCoeff = 0;
            if(ratioX >= ratioY) {
                reducCoeff = ratioY;
            } else {
                reducCoeff = ratioX;
            }

            w = img.getWidth() * reducCoeff;
            h = img.getHeight() * reducCoeff;

            imgView.setX((imgView.getFitWidth() - w) / 2);
            imgView.setY((imgView.getFitHeight() - h) / 2);

        }
    }

只是稍微修改了这个链接的解决方案: 在ImageView中居中一个图像


-4

你的Image对象位于我的视图中, 我的视图位于picPain中。 picPain是居中的,但其内容在使用图像容器Graphics对象进行“绘制”时并不居中!

组件绘制是由我的视图完成的。 其次,容器myview的大小需要从容器picPain的每个侧面进行测量。 虽然容器具有其内部内容的对齐方式,“它们具有默认的尺寸和位置,从左上角开始绘制”。 设置它们并计算它们!


设置它们并计算它们!不,(几乎)从不在客户端代码中 - 这是适当布局面板的任务。 - kleopatra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接