JDialogとJFXPanelを使用せず、 JavaFX Stagesのみを使用することをお勧めします。
セカンダリ スクリーンを aにして、セカンダリ ステージを表示する前にsecondaryStage.initOwner(primaryStage)Stage
を呼び出します。
ステージのドキュメントから:
ステージには、必要に応じて所有者 Window を設定できます。ウィンドウがステージの所有者である場合、それはそのステージの親であると言われます。. . ステージは常にその親ウィンドウの上にあります。
セカンダリ ステージの所有者を設定すると、「アプリケーションの上にのみセカンダリ画面を表示する」という要件が正しく満たされると思います。
更新: コメントからの追加の質問への回答
セカンダリ ウィンドウが開いたら、メイン ステージとのやり取りはしたくありません (再度やり取りできるようにするには、セカンダリ ウィンドウを閉じる必要があります)。
プライマリ ステージへの入力をブロックするには、セカンダリ ステージを表示する前に、secondaryStage.initModality(Modality.WINDOW_MODAL)を呼び出します。
他のアプリケーション ウィンドウへのすべての入力をブロックしたい場合は、 WINDOW_MODALの代わりにAPPLICATION_MODALを使用できます。どちらを使用するかは、必要なユーザー エクスペリエンスによって異なります。
セカンダリ画面をメイン画面の中央に配置するAPIには明らかなものはありません。メイン画面がどこにあっても、常にモニターの中央に表示されます。
質問のこの部分は、ステージの中心の場所の複製です。重複に対する回答には、子ウィンドウの中央揃えを実行するためのサンプル コードがあります。
そうです、パブリック API には、親ウィンドウに対する子ウィンドウの配置に関するものは何もありません。この機能Add helper Methods for Positioning popups relative to nodesの機能リクエストを提出しましたが、この機能リクエストは JavaFX 2.2 の時点ではまだ実装されていません。
子ダイアログの相対的な配置を行うために作成したサンプル プロジェクトがあり、これは役立つかもしれません。
親の中央に配置するには、子を表示する前にステージの位置と幅を照会し、表示するときに子の x 座標と y 座標を適切に設定することをお勧めします。これらはすべて、ウィンドウのx、y、および幅のプロパティに基づいて実行できます。
JavaFX UI コントロール サンドボックスには、必要な機能の一部を提供するダイアログ プロジェクトもあるため、自分でコーディングする必要はありません。
やがて、あなたが要求しているすべての機能が JavaFX コア プラットフォームに組み込まれることになるでしょう。