伸縮の設定

GUI をもつソフトウェアは、広い画面で実行した時はそれなりのメリットがある方が良いです。 画面の伸縮に合わせて、GUI コンポーネントの配置場所も自動的に変わるのが望ましいです。

ここでは、JavaFX における基本的な画面の伸縮設定について説明します。

ここでみる画面は次のような動きをします。

下部のボタンはウィンドウの下部にはりつき、幅の伸縮に対しても、片方のボタンは右側へ、 もう片方のボタンは左側にはりついています。

これの実装のポイントは次の通りです。

  • 画面全体を BorderPane をベースにする
  • 左右の伸縮については HGrow 属性を構成した Pane を配置する

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

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

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

<BorderPane minWidth="200.0"
	xmlns="http://javafx.com/javafx/8.0.171"
	xmlns:fx="http://javafx.com/fxml/1"
	fx:controller="application.MainViewController">
	<center>
		<VBox prefHeight="100.0" prefWidth="400.0"
			BorderPane.alignment="CENTER">
			<children>
				<Label text="Hello!">
					<VBox.margin>
						<Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
					</VBox.margin>
					<font>
						<Font size="24.0" />
					</font>
				</Label>
			</children>
		</VBox>
	</center>
	<bottom>
		<HBox prefHeight="33.0" prefWidth="400.0"
			style="-fx-background-color: #eeeeee;" BorderPane.alignment="CENTER">
			<children>
				<Button minWidth="75.0" mnemonicParsing="false"
					text="Button 1">
					<HBox.margin>
						<Insets bottom="10.0" left="20.0" right="20.0" top="10.0" />
					</HBox.margin>
				</Button>
				<Pane prefHeight="23.0" prefWidth="250.0" HBox.hgrow="ALWAYS" />
				<Button minWidth="75.0" mnemonicParsing="false"
					text="Button 2">
					<HBox.margin>
						<Insets bottom="10.0" left="20.0" right="20.0" top="10.0" />
					</HBox.margin>
				</Button>
			</children>
		</HBox>
	</bottom>
</BorderPane>

画面下部にはりつく領域は BorderPane を親にすることで作成できます。

また、その下部の領域内では HBox で左右の伸縮をしますが、基本的に存在しない領域はレンダーされないので Pane なりを配置し、 その伸縮設定 HGrowALWAYS にすることで、常にこの領域を優先的に伸縮させることになります。

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

© 2024 Java 入門