2012-04-20 17 views
15

Geçtiğimiz günlerde JavaFx2.0 ile bir yazılım programlıyordum, ama büyük bir sorunla karşılaştım, yani - Bir Controller sınıfına nasıl erişebilirim? Aynı sınıf türüne sahip her bir denetleyici sınıfı için, bağlı olduğu modelden dolayı farklı davranabilirler, bu nedenle görünümünün Denetleyici sınıfını almak ve bunu belirtilen modelle sağlamak istiyorum, bunu yapabilir miyim? Denetleyiciyi FXMLLoader ile almayı denedim, ancak getController() yöntemi null değerini döndürüyor!JavaFx 2.0'da bir Denetleyici sınıfına nasıl erişebilirim?

1.LightView.java

FXMLLoader loader = new FXMLLoader(); 
anchorPane = loader.load(LightView.class.getResource(fxmlFile));//fxmlFile = "LightView.fxml" 
//controller = (LightViewController) loader.getController();//fail to get controller!it is null 
//I want to -> controller.setLight(light); 

2.LightView.fxml

<AnchorPane ... fx:controller="light.LightViewController" > 

3.LightViewController.java

.... 
private Light light; 
public void initialize(URL arg0, ResourceBundle arg1) 

4.Light.java

.... a simple pojo 

Yani, yapmak istediğim her LightViewController'ı belirli bir Işık Nesnesiyle (bir Listeden) sağlamaktır. Herkes bana yardımcı olabilir mi? Çok teşekkürler!

+1

olası yinelenen. Farklı bir Görevden sahne değerleri güncelleniyor] (http://stackoverflow.com/questions/10107829/javafx-2-0-fxml-updating-scene-values-from-a-different-task) –

+1

Belki de bu cevap yardımcı olabilir : [http://stackoverflow.com/a/10108788/682495](http://stackoverflow.com/a/10108788/682495). –

cevap

49

aşağıdaki kullanın: Ben, not etmek istiyorum bu şekilde fxmlLoader.getController() yılında

URL location = getClass().getResource("MyController.fxml"); 

FXMLLoader fxmlLoader = new FXMLLoader(); 
fxmlLoader.setLocation(location); 
fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory()); 

Parent root = (Parent) fxmlLoader.load(location.openStream()); 

değil Alf cevabı ek olarak null

+0

Çok teşekkür ederim, yönteminiz tam ihtiyacım olan şey! Teşekkürler angain! – yinger090807

+13

@ yinger090807 [yanıtları kabul et] (http://meta.stackexchange.com/a/5235/160062) yardımcı olabilir (burada durum böyle görünüyor) – oers

+0

Burada bir durum var 'fxmlLoader.getController() 'bu şekilde çalışmadı. Ama nedenini bilmiyorum! – cdaiga

5

kod daha kısa olabilir:

URL location = getClass().getResource("MyController.fxml"); 

FXMLLoader fxmlLoader = new FXMLLoader(); 

Parent root = (Parent) fxmlLoader.load(location.openStream()); 

Bu da işe yarıyor. yerine

0

Kullanım getResourceAsStream:

anchorPane = loader.load(LightView.class.getResourceAsStream(fxmlFile)); 

, iyi basit çalışmak Onun. [JavaFX 2.0 + FXML ait

Bu deneyebilirsiniz
0

...

FXMLLoader loader = new FXMLLoader(); 
    loader.setLocation(getClass().getResource("LightView.fxml")); 
    loader.load(); 
    Parent parent = loader.getRoot(); 
    Scene Scene = new Scene(parent); 
    Stage Stage = new Stage(); 
    LightViewController lv = loader.getController(); 
    lv.setLight(light); 
    Stage.setScene(Scene); 
    Stage.show(); 
İlgili konular