通过FXML的JavaFX ImageView不起作用

时间:2014-03-25 12:43:47

标签: image imageview javafx fxml

我在使用FXML上的ImageView加载图片时遇到问题。

我的控制器类:

public class BoxViewController {
    @FXML
    private Label label_boxID;

    @FXML
    private ImageView boximage;

    public void initData(ObservableList<BoxProperty> observableList,
                         BoxService sBox, 
                         TableView tableview) {
        this.label_boxID.setText(
            String.valueOf(this.boxproperty.getPboxid()));

        Image image = new Image("boximage.jpg");
        this.boximage = new ImageView();
        this.boximage.setImage(image);
    }
}

因此,使用文本设置标签有效,但图像不会出现在我的ImageView中。 对于ImageView,我在FXML文件中添加了一个ID:

 <ImageView fx:id="boximage" 
            disable="false" 
            fitHeight="150.0" fitWidth="200.0"
            layoutX="69.0" layoutY="322.0" 
            pickOnBounds="true" 
            preserveRatio="true" />

我很困惑,为什么这不起作用,因为标签有效,但图像不会加载 我还检查了boximage是否为空,但事实并非如此。也没有例外。

2 个答案:

答案 0 :(得分:12)

可能它是源图像位置问题。根据{{​​3}}的评论,来自 &#34; Maxim&#34; ,如果您使用new Image("boximage.jpg");,则根目录为< em>主项目文件夹,例如scene.getStylesheets().add("login.css");根文件夹为src。 也许你可以试试这个:

Image img = new Image("file:boximage.jpg");
ImageView imageView = new ImageView(img);

尝试将源图像移动到此代码的主项目文件夹

仅出于测试目的,尝试从 FXML

加载该图片
<ImageView id="boxImage" ...>    
   <image>
      <Image url="@boximage.jpg" />
   </image>
</ImageView>

答案 1 :(得分:4)

这有效:

BufferedImage bufferedImage;
bufferedImage = ImageIO.read(new File(this.path));
Image image = SwingFXUtils.toFXImage(bufferedImage, null);
this.boximage.setImage(image);