2012-04-20 11 views
15

हाल ही में मैं JavaFx2.0 के साथ एक सॉफ्टवेयर प्रोग्रामिंग कर रहा था, लेकिन मुझे एक बड़ी समस्या से मुलाकात हुई, यानी - मैं नियंत्रक वर्ग तक कैसे पहुंच सकता हूं? एक ही कक्षा के प्रकार के साथ प्रत्येक नियंत्रक वर्ग के लिए, वे मॉडल के कारण अलग-अलग कार्य कर सकते हैं, इसलिए मैं दृश्य नियंत्रक वर्ग प्राप्त करना चाहता हूं और इसे निर्दिष्ट मॉडल प्रदान कर सकता हूं, क्या मैं यह कर सकता हूं? मैंने FXMLLoader द्वारा नियंत्रक प्राप्त करने का प्रयास किया है, लेकिन विधि getController() शून्य वापस आती है! क्यों?मैं जावाएफएक्स 2.0 में कंट्रोलर क्लास तक कैसे पहुंच सकता हूं?

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 

तो, मैं जो करना चाहता हूं वह प्रत्येक लाइटव्यू कंट्रोलर को एक निर्दिष्ट लाइट ऑब्जेक्ट प्रदान करता है (वे एक सूची से हैं)। क्या कोई मेरी मदद कर सकता है? बहुत बहुत धन्यवाद!

+1

[JavaFX 2.0 + FXML के संभावित डुप्लिकेट। दृश्य कार्यों को एक अलग कार्य से अपडेट करना] (http://stackoverflow.com/questions/10107829/javafx-2-0-fxml-updating-scene-values-from-a- अलग-अलग) –

+1

शायद यह उत्तर सहायक हो सकता है : [http://stackoverflow.com/a/10108788/682495 ](httpoverflow.com/a/10108788/682495)। –

उत्तर

49

मैं निम्नलिखित का उपयोग करें:

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

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

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

इस तरह fxmlLoader.getController() में नहीं है null

+0

बहुत बहुत धन्यवाद! आपकी विधि काफी है जो मुझे चाहिए! धन्यवाद! – yinger090807

+13

@ yinger090807 आप [उत्तर स्वीकार कर सकते हैं] (http://meta.stackexchange.com/a/5235/160062) जो सहायक थे (जो यहां मामला प्रतीत होता है) – oers

+0

मेरे पास ऐसी स्थिति है जहां 'fxmlLoader.getController() 'इस तरह से काम नहीं किया। लेकिन मुझे नहीं पता क्यों! – cdaiga

5

Alf के जवाब के अलावा, मैं नोट करना चाहते हैं, कोड कम हो सकता है कि:

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

FXMLLoader fxmlLoader = new FXMLLoader(); 

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

यह भी काम करता है। बजाय

0

उपयोग getResourceAsStream:

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

इसका सरल, अच्छी तरह से काम करते हैं।

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(); 
संबंधित मुद्दे

 संबंधित मुद्दे