web-dev-qa-db-ja.com

FXMLを介したJavaFXImageViewが機能しない

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がnullでないかどうかも確認しましたが、そうではありません。例外もありません。

7
mathew11

これは機能します:

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

多分それはソース画像の場所の問題です。 このウェブサイト のコメントによると、 "Maxim"からnew Image("boximage.jpg");を使用する場合、ルートディレクトリはメインプロジェクトフォルダであり、たとえば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>
_
13
user2151486