山傘のプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

JavaFX ボタンを押すと画像が表示される

JavaFXで画像を表示する方法を学んだので、ボタンを押すと画像が表示されるアプリを作りました。
f:id:yamakasa3:20180301003355p:plainf:id:yamakasa3:20180301003407p:plain

この猫さんの画像は、
無料の写真: 猫, かわいい, ペット, 動物, 赤いマッカレルタビー, 居眠りする - Pixabayの無料画像 - 3183742
から利用しました。


ラベルのバックグラウンドに画像を埋め込んでいるので、ボタンが押されたら、ラベルのテキストを初期化する必要がありました。

import java.nio.file.Path;
import java.nio.file.Paths;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundImage;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
public class Display extends Application{
	private Label label;
	private Button btnOk;
	@Override
	public void start(Stage stage) throws Exception {
		stage.setTitle("MyButton");
		stage.setWidth(600);
		stage.setHeight(600);

		//ラベルの設定
		label = new Label("画像");
		label.setFont(new Font(200));

		//ボタンの機能
		btnOk = new Button("ボタン");
		btnOk.setPrefWidth(120);
		btnOk.setOnAction(event -> setLabelImage());

		//配置
		VBox root = new VBox();
		root.setAlignment(Pos.CENTER);
		root.setPadding(new Insets(10, 10, 10, 10));
		root.setSpacing(20.0);
		root.getChildren().addAll(label, btnOk);

		stage.setScene(new Scene(root));
		stage.show();
	}
	void setLabelImage(){
		//画僧の設定
		Path path = Paths.get("cat.jpg");
		Image img = new Image(path.toUri().toString());
		BackgroundImage bimg = new BackgroundImage(img, null, null, null, null);
		Background bg = new Background(bimg);
		label.setMinSize(img.getWidth(), img.getHeight());
		label.setBackground(bg);
		label.setBackground(bg);
		//labelの文字を初期化
		label.setText("");
	}
	public static void main(String[] args) {
		launch(args);
	}
}