JavaFX の Maven 基本的なアーキタイプを探していて、
というのを見つけたので、ここに紹介されたとおり mvn コマンドを以下のように実行して
mvn archetype:generate -DarchetypeGroupId=com.zenjava -DarchetypeArtifactId=javafx-basic-archetype
作成した fxml を JavaFX Scene Builder 2.0 で開こうとすると、
java.io.IOException: javafx.fxml.LoadException: C:/work/sample/src/main/resources/fxml/hello.fxml at com.oracle.javafx.scenebuilder.kit.fxom.FXOMLoader.load(FXOMLoader.java:92) at com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument.<init>(FXOMDocument.java:80) : ... 22 more Caused by: java.lang.ClassNotFoundException: org.tbee.javafx.scene.layout.fxml.MigPane
とエラーなる。つまり標準SDKで配布されてない Pane がデザインコンテナとして使われており
fxml から、
import org.tbee.javafx.scene.layout.fxml.MigPane
の記述を削除して、別の Pane で書き直す。
<?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import javafx.scene.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <Pane id="rootPane" prefHeight="207.0" prefWidth="322.0" styleClass="main-panel" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="yip.fxtest.HelloController"> <children> <Label layoutX="25.0" layoutY="45.0" text="First Name:" /> <TextField fx:id="firstNameField" layoutX="112.0" layoutY="73.0" prefColumnCount="30" prefHeight="23.0" prefWidth="201.0" /> <Label layoutX="25.0" layoutY="77.0" text="Last Name:" /> <TextField fx:id="lastNameField" layoutX="112.0" layoutY="42.0" prefColumnCount="30" prefHeight="23.0" prefWidth="201.0" /> <Button layoutX="191.0" layoutY="104.0" onAction="#sayHello" text="Say Hello" /> <Label fx:id="messageLabel" layoutX="25.0" layoutY="145.0" prefHeight="36.0" prefWidth="274.0" styleClass="hello-message" /> </children> </Pane>
pom.xml も以下のように書き直す。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>yip.fxtest</groupId> <artifactId>fxtest1</artifactId> <packaging>jar</packaging> <version>1.0</version> <properties> <slf4j.version>1.7.12</slf4j.version> <log4j.version>1.2.17</log4j.version> </properties> <dependencies> <!-- MigLayout --> <dependency> <groupId>com.miglayout</groupId> <artifactId>miglayout-javafx</artifactId> <version>5.0</version> </dependency> <!-- Apache Commons --> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <!-- Logging --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> </dependencies> <build> <finalName>fxtest1</finalName> <plugins> <plugin> <groupId>com.zenjava</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>8.8.3</version> <configuration> <mainClass>yip.fxtest.MainApp</mainClass> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
実行すると以下の画面で、基本的なテキスト入力→ボタンアクション→入力結果を表示という基本的なコードなので
満足する初期段階のソースコードなんだが、標準でない Pane の使用で躓かせてくれる。。