2012-09-22 15 views
21

, özel bileşenler içerir ve kabın kontrol ünitesi kendi kontrolörleri nasıl kullanılacağına dair bir örnektir.javafx iç içe Kontrol (FXML <include>) <a href="http://docs.oracle.com/javafx/2/api/javafx/fxml/doc-files/introduction_to_fxml.html#nested_controllers">this</a> tutotial olarak

main_window_content.fxml

<VBox fx:controller="com.foo.MainController"> 
    <fx:include fx:id="dialog" source="dialog.fxml"/> 
    ... 
</VBox> 

MainController.java bileşeni sadece bir kez dahil edilirse, iyi çalışıyor

public class MainController extends Controller { 
    @FXML private Window dialog; 
    @FXML private DialogController dialogController; 

    .. 

. Aynı bileşen iki kez eklenirse, denetleyiciler başlatılmaz. Her iki denetleyici de boş.

main_window_content.fxml

<VBox fx:controller="com.foo.MainController"> 
     <fx:include fx:id="dialog1" source="dialog.fxml"/> 
     <fx:include fx:id="dialog2" source="dialog.fxml"/> 
     ... 
    </VBox> 

public class MainController extends Controller { 
     @FXML private Window dialog1; 
     @FXML private DialogController dialogController1; 
     @FXML private Window dialog2; 
     @FXML private DialogController dialogController2; 

biri bana sorunu çözmek için yardım eder misiniz MainController.java? teşekkürler

Bu benim FXML yükleme kodum. Bu ana uygulama yönteminde yürütülür:

public void start(Stage stage) throws Exception { 
    Parent root = FXMLLoader.load(getClass().getResource("main_window_content.fxml")); 
    stage.setTitle("FXML Welcome"); 
    stage.setScene(new Scene(root, 300, 275)); 
    stage.show(); 
} 
+0

İkinci soru bu soru için doğru çözümdür, "Kabul edildi" olarak işaretlenmelidir "Kabul edildi" –

+0

@AmirArad Hangisi "ikinci"? – glglgl

cevap

29

Teşekkür Daniel (OTN itibaren) Benim kodunda hata buldum, benim kontrolör değişkenlerin isimleri yanıldı. <fx:id>Controller olmalıdır. Bir başka deyişle bu olmalıdır:

MainController.java

public class MainController extends Controller { 
@FXML private Window dialog1; 
@FXML private DialogController dialog1Controller; 
@FXML private Window dialog2; 
@FXML private DialogController dialog2Controller; 

Ama changes sürüm 2.2 tanıtılan Derslerinizi her şeyi kolayca <fx:root> etiketi (like this tutorial) kullanılarak çözülebileceğini gördük. Ben FXML benim bileşeni girmiş basitçe şöyle ilan:

<HBox> 
    <Dialog id="dialog1" text="Hello World!"/> 
    <Dialog id="dialog2" text="Hello World!"/> 
</HBox> 

Ben

+16

Ayrıca, sorunun cevabı olarak daha görünür hale getirmek için kendi yanıtınızı kabul edildi olarak işaretleyin. Bu cevabın yanındaki onay işaretini tıklamanız yeterlidir. –

1

iç içe fxmls ile 8.0 yanı netbeans bir hata var gibi görünüyor yardımcı olmak istiyoruz. İç içe fxml'nin denetleyici nesnesini oluşturmak için netbeans'e güvenilemez, MainController'ınıza manuel olarak eklenmelidir. Denetleyici netbeans'te her güncellendiğinde her zaman silinir ve bu nedenle sıkıcı olabilir. Bu durumda ana kontrolöre manuel

@FXML private DialogController dialog1Controller; 

satırı ekleyerek olacağını Bu örnek için , o zaman normal çalışır. Büyük fxmls/denetleyicileri düzenlemek için çok kullanışlıdır.

İlgili konular