IntelliJの使用JavaFXアプリケーションを作成し、フレームワークとしてKotlinとMavenを追加しました。これには、sample.fxmlファイルとController.javaとMain.javaが付属しています。私はKotlin(MainWindowController.kt)のコントローラー用の新しいクラスを作成し、sample.fxmlファイルの名前をMainWindow.fxmlに変更しました。私が見えるようにMainWindow.fxmlを更新:FXMLコントロールは常にKotlinを使用するとnullです
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.GridPane?>
<GridPane fx:controller="reader.MainWindowController" xmlns:fx="http://javafx.com/fxml" xmlns="http://javafx.com/javafx/8" alignment="center" hgap="10" vgap="10">
<Label fx:id="helloLabel" text="Hello"/>
</GridPane>
そして、私が持っている私のMainWindowController.ktファイルに:
package reader
import javafx.fxml.FXML
import javafx.scene.control.Label
class MainWindowController {
@FXML var helloLabel: Label? = null
init {
println("Label is null? ${helloLabel == null}")
}
}
ここに私のMain.javaです:
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("MainWindow.fxml"));
primaryStage.setTitle("My App");
primaryStage.setScene(new Scene(root, 1000, 600));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
私が実行すると、アプリケーションは、ラベルがnullであることを印刷行に示します。そうでなければ、ウィンドウが正しく表示され、ラベルからテキストが表示されます。 nullは私が持っている問題です。私はKotlinでFXMLを使用することにそれほど気づきませんでした。私が見つけたのは、時代遅れで、実際の作業の解決策を持っていないようでした。
ラベルがnullである理由を知っている人はいますか?私は間違ったことや何かを誤解しているに違いない。
編集:ここで私は今、迅速な回答のおかげで動作することを持っているものだ:
package reader
import javafx.fxml.FXML
import javafx.scene.control.Label
class MainWindowController {
@FXML var helloLabel: Label? = null
fun initialize() {
println("Label is null? ${helloLabel == null}")
}
}
私はKotlinを知らない:オブジェクト構築の一環として呼び出さ 'init'方法ですか? –
[TornadoFX](https://github.com/edvin/tornadofx)をチェックしてください。それはKotlinのJavaFXを本当にいいものにし、レイアウトとスタイルの両方に対してタイプセーフなDSLを持っています。 –
@ RuckusT-Boomさんのコメントに追加するには、FXMLもサポートしていて、非常にうまく合理化しています。 https://github.com/edvin/tornadofx-guide/blob/master/Part%202%20-%20Usage%20Basics/10.%20FXML.md – tmn