İstediğiniz yanıtın bu olmadığını biliyorum, ancak IMO önerilen çözümler iyi değil (ve sizin yönteminiz). Neden? Çünkü uygulama durumuna bağlıdırlar. JavaFX'te bir kontrol, bir sahne ve bir sahne birbirine bağlı değildir. Bu, bir sahneye eklenmeden bir kontrolün yaşayabileceği ve bir sahnenin bir sahneye eklenmeden var olabileceği anlamına gelir. Ve sonra, t1 anında, kontrol bir sahneye bağlanabilir ve t2 anında bu sahne bir aşamaya eklenebilir (ve bu, neden birbirlerinin gözlemlenebilir özellikleri olduklarını açıklar).
Dolayısıyla, denetleyici referansını almayı ve bir yöntemi çağırmayı öneren yaklaşım, aşamayı buna geçirerek uygulamanıza bir durum ekler. Bu, o yöntemi, aşama oluşturulduktan hemen sonra doğru zamanda çalıştırmanız gerektiği anlamına gelir. Başka bir deyişle, şimdi bir sipariş izlemeniz gerekir: 1- Aşamayı oluşturun 2- Oluşturulan bu aşamayı bir yöntemle kontrolöre geçirin.
Bu yaklaşımda bu sıralamayı değiştiremezsiniz (veya değiştirmemelisiniz). Yani vatansızlığı kaybettin. Ve yazılımda genellikle durum kötüdür. İdeal olarak, yöntemler herhangi bir çağrı sırası gerektirmemelidir.
Peki doğru çözüm nedir? İki alternatif var:
1- Yaklaşımınız, kontrolör dinleme özelliklerinde sahneye çıksın. Bunun doğru yaklaşım olduğunu düşünüyorum. Bunun gibi:
pane.sceneProperty().addListener((observableScene, oldScene, newScene) -> {
if (oldScene == null && newScene != null) {
newScene.windowProperty().addListener((observableWindow, oldWindow, newWindow) -> {
if (oldWindow == null && newWindow != null) {
((Stage) newWindow).maximizedProperty().addListener((a, b, c) -> {
if (c) {
System.out.println("I am maximized!");
}
});
}
});
}
});
2- Yapmanız gereken şeyi, yarattığınız yerde yaparsınız Stage
(ve istediğiniz bu değil):
Stage stage = new Stage();
stage.maximizedProperty().addListener((a, b, c) -> {
if (c) {
System.out.println("I am maximized!");
}
});
stage.setScene(someScene);
...