使用Javafx将图像插入ImageView

时间:2014-03-23 22:25:08

标签: imageview javafx

我有一个帧控制器类,我从表单(使用Javafx Scene Builder创建)中读取值并在控制其有效性后插入信息。我想要做的只是知道如何将图像插入舞台上的ImageView元素。

public class FrameController {
   @FXML
   private ImageView img_view;
   ....
   @FXML
   public void ButtonClicked() {
   ...


     img_view = new ImageView();
     Image img = new Image("../img/img.jpg");
     img_view.setImage(img);
   ...
   }
}

这不起作用。它在我单击绑定到ButtonClicked()函数的按钮后运行调试器。我错过了什么吗?如何将图像插入场景中的ImageView元素?我将非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

要解决的问题:

  1. 相对路径引用../将不会解析为可由jar协议加载的URL(这是用于在打包的JavaFX应用程序中加载资源的标准协议)。因此,请勿在其中使用..\的相对引用。
  2. 而是使用绝对引用,例如:

    /com/mycompany/myapp/myproject/img/img.jpg

  3. 要检查的一些事项(假设您已做出上述更改):

    1. 使用FXMLLoader
    2. 加载您的FXML
    3. 在您的FXML中有一个引用您的FrameController的fx:controller属性。
    4. 在你的FXML中有一个ImageView元素,它定义了fx:id img_view(确保它真的是fx:id而不只是id)。
    5. 了解谢尔盖回答Where does javafx.scene.image.Image("flower.png") look for flower.png?
    6. 中概述的图像加载规则
    7. 在控制器中添加一行:

      System.out.println(FrameController.getClass().getResource(
          "/com/mycompany/myapp/myproject/img/img.jpg").toExternalForm()
      );
      

      这将打印系统实际查找图像的位置。

    8. 确保您的构建系统正在将img.jpg复制到您的类输出目录。为此,在构建完成并假设构建创建名为myapp.jar的jar后,运行:

      jar xvf myapp.jar

      并查看img.jpg是否位于路径com / mycompany / myproject / img / img.jpg中。

    9. 创建img对象后,请调用:

      img.isError();
      

      查看图片是否有加载错误。