2016-03-30 17 views
0

Programımda her sekmesi kendi FXML dosya ve denetleyicisine sahip bir tabPane var. Sekme 2 için FXML dosyasını yükledim (Zamanlama) .Benimdeki bir işlevi çağırmaya çalışıyorum. Ebeveyn denetleyiciden (FXML Belgesi) çocuk denetleyici (Zamanlayıcı). Denetleyiciyi FXML Loader kullanarak yüklediğimde, bir boş değer döndürür. Bunu Nasıl Çözebilirim .Javafx FXML yükleyici getcontroller null döndürür

Ana FXMLDocument: o fxml dosyasını (bu durumda olmak zorunda yüklediğinde kontrolör sınıfı belirtildiğinde beri

<AnchorPane xmlns:fx="http://javafx.com/fxml/1" fx:id="AnchorPane" prefHeight="600" prefWidth="800" xmlns="http://javafx.com/javafx/8.0.65" fx:controller="showprojavafxml.FXMLDocumentController"> 
    <children> 

cevap

0

FXMLLoader sadece denetleyici başlatır İşte

benim ana kodu fxml dosyasında ...). Yükleyicide asla load() numaralı telefonu aradığınızdan, denetleyici asla oluşturulmaz.

iki farklı mekanizmalarla iki kez FXML dosya başvuran Görünüşe: Bir kez Oluşturduğunuz FXMLDocumentController.initialize(), içinde, bulunduğu yer bir <fx:include> vasıtasıyla, ana FXML belgenin kendisinde kez fxml dosyasına ayarlayın ve bir FXMLLoader. <fx:include>, Scheduler.fxml'da tanımlanan UI'nin görüntülenmesine neden oluyor; initialize() yönteminde oluşturduğunuz FXMLLoader yöntemi (hiçbir zaman load() numaralı telefonu aramazsınız ve sonucu görüntülersiniz) değildir.

Ürünle birlikte verilen bir fxml için bir denetleyiciye başvurmak üzere "Nested controller" technique'u kullanın. Ben aldık

public class FXMLDocumentController { 

    @FXML 
    private SchedulerController schedulerController ; 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     schedulerController.refreshList(); 
    } 

} 
+0

Teşekkür: Eğer ismi bir alana kontrolörü enjekte Şimdi

<Tab fx:id="tab2" text="Scheduler" > <fx:include fx:id="scheduler" source="Scheduler.fxml" /> </Tab> 

eklenen metinle "Controller" ile fx:id geçerli:

Öncelikle fx:id sizin fx:include bir ekleme Bu fonksiyonu ikinci kontrol cihazımdan arayabilmek ancak mevcut ekranımda güncellenmemesi ancak fonksiyonun çalıştırılması. – tashtoons

+0

Ancak şimdi 'load()' diyorsunuz, ancak FXML'yi yüklediğinizde elde ettiğiniz kullanıcı arayüzünü görüntülemiyorsunuz. Denetleyici, görünmeyen bir kullanıcı arayüzünü yönetiyor. –

+0

Ah, ayrıca fxml'yi görüntüleyen bir '' seçeneğiniz de var. Güncellenmiş cevaba bakınız. –

İlgili konular