🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

501閲覧

ファイルから写真を読み込んで、ラベルに写真を張り付けるボタンを作りたいです

nakagen

総合スコア24

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

1グッド

0クリップ

投稿2021/01/03 07:52

前提・実現したいこと

写真をファイルから読み込んで、ラベルに写真を張り付けるシステムを作りたいのですが、下記のコードだと、fcが無効になってしまい、使うことが出来ません…
どなたか教えて欲しいです。

現在のコード

class hariEventHandler implements EventHandler<ActionEvent>{ public void handle(ActionEvent e4) { FileChooser fc = new FileChooser(); im = new Image(getClass().getResource(fc)); lb.setGraphic(new ImageView(im)); } }

該当のソースコード

javafx eclipse
TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ファイル選択ダイアログを出す、ということでいいんでしょうか?
だとするとこんな感じでしょうかね。

Java

1import java.io.File; 2 3import javafx.application.Application; 4import javafx.scene.Scene; 5import javafx.scene.control.Button; 6import javafx.scene.control.Label; 7import javafx.scene.image.Image; 8import javafx.scene.image.ImageView; 9import javafx.scene.layout.BorderPane; 10import javafx.stage.FileChooser; 11import javafx.stage.Stage; 12 13 14public class Main extends Application { 15 public static void main(String[] args) { launch(args); } 16 17 @Override 18 public void start(Stage primaryStage) { 19 BorderPane root = new BorderPane(); 20 primaryStage.setScene(new Scene(root, 400, 300)); 21 22 Label label = new Label("Label"); 23 root.setCenter(label); 24 25 Button button = new Button("画像の選択..."); 26 root.setBottom(button); 27 button.setOnAction(ae -> { 28 FileChooser fileChooser = new FileChooser(); 29 FileChooser.ExtensionFilter imageFilter = new FileChooser.ExtensionFilter("画像ファイル", "*.bmp", "*.gif", "*.jpg", "*.jpeg", "*.png"); 30 fileChooser.getExtensionFilters().add(imageFilter); 31 32 File file = fileChooser.showOpenDialog(primaryStage); 33 if (file != null) { 34 label.setGraphic(new ImageView(new Image(file.toURI().toString()))); 35 } 36 }); 37 38 primaryStage.show(); 39 } 40}

投稿2021/01/03 13:19

編集2021/01/05 08:30
TN8001

総合スコア9855

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakagen

2021/01/05 06:15

ご回答ありがとうございます。1度テストとして試してみたのですが、var型が適用されなかったのですが、どのような型でしょうか…?
退会済みユーザー

退会済みユーザー

2021/01/05 06:56

「java jar」でググってみようー!
TN8001

2021/01/05 08:30

こりゃ失礼。varはJava10以降ですね。 型を書くように回答を修正しました。 試してませんが、Java8ならこれで大丈夫だと思います^^; 質問にJavaのバージョンを書いていただくとありがたいです。
nakagen

2021/01/05 09:04

ご回答ありがとうございます!javaのバージョンを記載せず、申し訳ありませんでした…。お聞きしたいのですが、コード内にあるprimarystageは必ず使うものでしょうか…?(イベントハンドラの中なのでどう設定すればよいのか分かりません…)
nakagen

2021/01/05 09:13

こちらが、改正後のコードです class meEventHandler implements EventHandler<ActionEvent>{ public void handle(ActionEvent e3) { stage4 = new Stage(); lb = new Label(""); ch1 = new CheckBox("水やり"); ch2 = new CheckBox("晴れ"); bt1 = new Button("設定"); BorderPane bp =new BorderPane(); VBox hb = new VBox(); VBox hb1 = new VBox(); hb.getChildren().add(ch1); hb.getChildren().add(ch2); hb.setAlignment(Pos.CENTER); hb1.getChildren().add(lb); hb1.getChildren().add(bt1); hb1.setAlignment(Pos.CENTER); bp.setLeft(hb); bp.setCenter(hb1); Scene sc = new Scene(bp, 400, 400); stage4.setScene(sc); stage4.show(); bt1.setOnAction(ae -> { FileChooser fileChooser = new FileChooser(); FileChooser.ExtensionFilter imageFilter = new FileChooser.ExtensionFilter("画像ファイル", "*.bmp", "*.gif", "*.jpg", "*.jpeg", "*.png"); fileChooser.getExtensionFilters().add(imageFilter); File file = fileChooser.showOpenDialog(primaryStage); if (file != null) { lb.setGraphic(new ImageView(new Image(file.toURI().toString()))); } }); } }
TN8001

2021/01/05 09:21

>primarystageは必ず使うものでしょうか…? ファイル選択ダイアログは通常モーダルで出します。 モーダルというのはダイアログが開いている間は、元の(メインの)ウィンドウを操作できないような出し方のことです。 メモ帳等で試してみてください。 開くファイルを選択時は、メモ帳本体をクリックしてもエラー音がして選択できないはずです。 showOpenDialog(null) とすることもできますが、元のウィンドウを操作できてしまうのであまりよくないでしょう。 コードが一部すぎてわかりませんが、何かのコントロール等から getScene().getWindow() で今のウィンドウをとることは可能です。
nakagen

2021/01/05 09:33

一度、showOpenDialog(null)を入力して試してみました。写真は、張り付けられたのですが、大きさを調整することは可能でしょうか…?また、getScene().getWindow()についてなのですが、このイベントハンドラは、 Scene sc = new Scene(bp, 400, 400); stage4.setScene(sc); stage4.show(); を調整しないといけないことになるのでしょうか…?
TN8001

2021/01/05 09:52

>一度、showOpenDialog(null)を入力して試してみました。 ちょっとよくわかりませんが、stage4が親ではないですか? showOpenDialog(stage4) >大きさを調整することは可能でしょうか…? どう調整したいかによりますが、例えばすべて同じ高さにするならこんな感じです。 label.setGraphic(new ImageView(new Image(file.toURI().toString(), 0, 100, true, true))); [Image (JavaFX 8)](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/image/Image.html#Image-java.lang.String-double-double-boolean-boolean-
nakagen

2021/01/05 10:02

回答ありがとうございます!すべて確認して設定したところ、出来ました!ありがとうございます!!!
nakagen

2021/01/05 10:05 編集

すみませんが、設定した写真を特定のファイルに保存できるコード(ファイルに保存して、スライドショーを流す写真に繋げる)も作りたいのですが… お時間大丈夫でしょうか、何度もすみません…
TN8001

2021/01/05 10:14

>設定した写真を特定のファイルに保存できるコード ファイルでなくフォルダ(ディレクトリ)ですよね? 質問と離れてきているので、別に立てていただきたいです。
nakagen

2021/01/05 10:19

了解しました。何から何まですみません…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問