サンプル溶液
パラメータの受け渡し JavaFX FXMLの手法を使用して、コントローラでステージを初期化できます。
ユーティリティ ウィンドウをドラッグすると、画面の x 座標と y 座標を追跡するユーティリティ ウィンドウを作成するサンプル プログラムを次に示します。ユーティリティ ウィンドウの内容は、fxml で定義されたペインに表示されます。

StageTrackingSample.java
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.*;
import javafx.stage.*;
public class StageTrackingSample extends Application {
@Override public void start(final Stage stage) throws Exception {
final FXMLLoader loader = new FXMLLoader(
getClass().getResource(
"stagetracking.fxml"
)
);
final Parent root = (Parent) loader.load();
final StageTrackingController controller = loader.getController();
controller.initData(stage);
stage.initStyle(StageStyle.UTILITY);
stage.setResizable(false);
stage.setScene(new Scene(root));
stage.show();
}
public static void main(String[] args) { launch(args); }
}
StageTrackingController.java
import javafx.beans.binding.Bindings;
import javafx.fxml.FXML;
import javafx.scene.control.*;
import javafx.stage.Stage;
public class StageTrackingController {
@FXML private Label stageX;
public void initialize() {}
public void initData(final Stage stage) {
stageX.textProperty().bind(
Bindings.format(
"(%1$.2f, %2$.2f)",
stage.xProperty(),
stage.yProperty()
)
);
}
}
stagetracking.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="30" minWidth="100" xmlns:fx="http://javafx.com/fxml" fx:controller="test.StageTrackingController">
<Label fx:id="stageX" layoutX="0" layoutY="0"/>
</AnchorPane>
代替ソリューション
@FXML コンポーネントからステージを取得するという tarrsalah の回答も、コントローラーのルート コンポーネントが既にステージに追加されているシーンに既に追加されていることがわかっている場合に適した方法です (これは、何かの場合によくあるケースです)。ボタンイベントハンドラーが起動されるように)。
それを行う別の方法は、tarrsalah の回答に似ていますが、@FXML ノードのシーン プロパティと変更されたシーンのウィンドウ プロパティで ChangeListeners を使用します。これにより、ペインが新しいシーンまたはステージに移動した場合に、シーンおよびステージへの変更を追跡できます。ほとんどのペインは 1 つのステージに留まる単一のシーンに追加されるだけなので、ほとんどの場合、これらの変更を追跡する必要はありません。
追加の質問とコメントへの回答
もっと簡単な答えを得ることができますか?
tarrsalah はすでにより簡単な回答を提供しています。
この場合のより単純な回答の唯一の問題は、回答のソリューションを複製して作業に適応させるために必要な十分なコンテキストが提供されない可能性があることです。
私は現在の答えをできる限りシンプルにしましたが、残念なことに、最も基本的な JavaFX FXML アプリケーションでさえ、かなりのコードとマークアップが必要です。
私はJavaの初心者です
最初の Java および JavaFX アプリケーションの開発を初めて開始する場合は、FXML を使用しないでください。代わりに、JavaFX コードでは標準のJava APIをそのまま使用してください。この API については、参照すべき 優れたEnsemble サンプルだけでなく、さらに多くのチュートリアルがあります。
JavaFX を開始する前に、基本をカバーする Java チュートリアル トレイルをすべて完了していることを確認してください。JavaFX の使用を開始するには、Java の基本のみが必要です。Java Enterprise Edition の学習に分岐する必要はなく、Swing を忘れることができます。
いくつかの基本的な JavaFX アプリケーションを作成し、Java API に従っていくつかのレイアウトを手作業でコーディングし、コア技術に慣れてきたら、大規模なアプリケーションにSceneBuilderと FXML を使用することを検討してください。その時点で、FXML の学習は非常に簡単であることがわかるでしょう。FXML の属性と要素は、Java API を反映したものにすぎません。
コードの通常とは異なるビットについて説明してください
あなたにとって何が異常なのかわからないので、私は本当にそれをすることはできません.
自分の知識や調査では理解できないコードの特定の部分がある場合は、難しい概念ごとに新しい StackOverflow の質問を作成してください。