Label (ラベル) の使い方

この記事では JavaFX の Label (ラベル) コントロールの使い方を説明します。

Label コントロールは他の GUI ライブラリでもよくあるように、基本的に編集不可の文字を表示するだけの非常に基礎的な GUI 要素です。 しかし、JavaFX ではアイコンも設定できるよう配慮されているなどしています。

それでは、使い方をみていきます。

ここで作るのは次のような画面です。

Hello, world! という文字が二つ並んでいますが、間違いではありません。 ひとつめは Scene Builder で FXML ファイルにそのまま書き込んだ静的な文字で、 二個目の文字はコントローラクラスから動的に設定しています。ついでに、フォントも設定しています。

一番下は画像付きのラベルの例です。png ファイルを読み込み、ラベルにセットしています。

JavaFX のラベルにフォントや画像を設定

それでは、コードをみていきましょう。

FXML ファイル Test1.fxml は次の通りです。

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>

<BorderPane
	xmlns="http://javafx.com/javafx/8.0.171"
	xmlns:fx="http://javafx.com/fxml/1"
	fx:controller="application.Test1Controller">
	<center>
		<VBox
			prefHeight="200.0"
			prefWidth="350.0"
			spacing="10.0"
			BorderPane.alignment="CENTER">
			<children>
				<Label text="Hello, world!">
					<font>
						<Font name="Roboto Regular" size="24.0" />
					</font>
				</Label>
				<Label
					fx:id="label1"
					prefHeight="40.0"
					prefWidth="300.0"
					text="Label" />
				<Label
					fx:id="label2"
					prefHeight="40.0"
					prefWidth="300.0"
					text="Label">
					<font>
						<Font name="Roboto Regular" size="18.0" />
					</font>
				</Label>
			</children>
			<BorderPane.margin>
				<Insets
					bottom="10.0"
					left="10.0"
					right="10.0"
					top="10.0" />
			</BorderPane.margin>
		</VBox>
	</center>
</BorderPane>

Scene Builder でみると次のように BorderPane > VBox の中にラベルを配置しています。

コントローラクラス Test1Controller.java は次の通りです。

package application;

import java.io.InputStream;

import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.text.Font;

public class Test1Controller {

	@FXML
	private Label label1;

	@FXML
	private Label label2;

	@FXML
	void initialize() {

		// Label 1 - Font
		label1.setText("Hello, world!");
		label1.setFont(new Font("Roboto Regular", 24));

		// Label 2 - Icon & Text
		InputStream inStream = getClass().getResourceAsStream("images/icon1-48x48.png");
		Image image = new Image(inStream);
		ImageView imageView = new ImageView(image);
		label2.setText("Settings");
		label2.setGraphic(imageView);

	}
}

尚、ここでは icon1-48x48.png なる PNG 画像を、application.images パッケージに保存してあります。

ひとつめのラベルは setFont メソッドでフォントを設定しています。Scene Builder では小さかった文字が、実行時にはやや大きく表示されることが確認できるはずです。

getResourceAsStream メソッドで、リソース内の画像のインプットストリーム InputStream を取得して、それから Image オブジェクト、 ImageView オブジェクトを作成し、それをラベルの setGraphic メソッドで設定しています。

JavaFX アプリケーションクラスは特に何もしていません。

package application;

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.fxml.FXMLLoader;


public class Main extends Application {
	@Override
	public void start(Stage primaryStage) {
		try {
			FXMLLoader loader = new FXMLLoader(getClass().getResource("Test1.fxml"));
			BorderPane root = (BorderPane)loader.load();
			Scene scene = new Scene(root,350,200);
			primaryStage.setScene(scene);
			primaryStage.show();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		launch(args);
	}
}

以上、JavaFX のラベルコントロールの基本的な使い方を説明しました。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Java 入門