【问题标题】:Centering ImageView using JavaFX使用 JavaFX 居中 ImageView
【发布时间】:2015-12-16 22:10:12
【问题描述】:

我正在尝试将 ImageView 置于 JavaFX GUI 的中心。但是,图像只出现在窗口的左上角。 我的代码:

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

【问题讨论】:

  • tutorial 提供了所有布局窗格的概览。 FlowPane 可能不是你需要的。

标签: java image javafx javafx-8


【解决方案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;
}

非常抱歉。我目前无法测试它。但它应该以这种方式工作。

【讨论】:

  • @StackOverflown 添加了一些代码。我目前无法测试代码。我非常抱歉。试试吧,如果它不起作用,请随时在此处发表评论。稍后我会看看它。
【解决方案2】:

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

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

        }
    }

刚刚从这个链接的解决方案修改了一点:Centering an image in an ImageView

【讨论】:

    【解决方案3】:

    您的 Image 对象位于 myview 中, myview 位于 picPain。 picPain 是居中的,但是它的内容在使用图像持有者 Graphics 对象的“绘图”方面不是居中的!

    组件图是myview。 其次,容器 myview 的大小需要从容器 picPain 的每一侧测量。 虽然容器具有其内部内容的对齐方式,但“它们具有从左上角绘制的大小和位置的默认值”。 设置它们并计算它们!

    【讨论】:

    • 设置它们并计算它们!不,(几乎)从不在客户端代码中 - 这是适当布局窗格的任务
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多