2012-06-03 23 views
14

मैं जावाएफएक्स में नया हूं और अपने वर्तमान सेटअप को उचित एमवीसी आर्किटेक्चर बनाने के लिए संघर्ष कर रहा हूं। मैंने दृश्य बिल्डर का उपयोग करके एक यूआई पर क्लिक किया और एक नियंत्रक वर्ग नामित किया।दृश्य बिल्डर के साथ जावाएफएक्स में एमवीसी पैटर्न

स्टार्टअप:

public class Portal extends Application { 
    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage stage) throws Exception { 
     Parent root = FXMLLoader.load(getClass().getResource("PortalUI.fxml")); 

     stage.setTitle("Portal"); 
     stage.setScene(new Scene(root)); 
     stage.show(); 
    } 
} 

और नियंत्रक वर्ग कोड के बाकी में शामिल है।

public class AccommodationPortalView implements Initializable { 
    @Override 
    public void initialize(URL url, ResourceBundle resources) { 
    // Work here. 
    } 
} 

मेरे प्रोफेसर ने पूछा कि मैं इस आवेदन की चिंताओं और जिम्मेदारियों को और अलग करता हूं। नियंत्रक न केवल राज्य का प्रबंधन कर रहा है और बैकएंड के साथ बात कर रहा है, बल्कि दृश्य को अद्यतन भी कर रहा है।

मेरी पहली प्रतिक्रिया नियंत्रक वर्ग को देखने और नियंत्रक और मॉडल के लिए दो अन्य वर्ग बनाने देना था।

हालांकि, मुझे इन टुकड़ों को जोड़ने के तरीके पर नुकसान हुआ है। मुझे दृश्य को तुरंत चालू करने की आवश्यकता नहीं है, इसलिए कोई दृश्य उदाहरण नहीं है कि मैं अपने नियंत्रक को पास कर सकता हूं, उदाहरण के लिए। इसके बाद, मैंने उन्हें सभी सिंगलेट बनाने की कोशिश की और बस नियंत्रक को रनटाइम पर लाने की अनुमति दी, लेकिन इससे मुझे एक त्रुटि मिलती है।

public class Portal extends Application { 
    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage stage) throws Exception { 
     Parent root = FXMLLoader.load(getClass().getResource("PortalUI.fxml")); 

     stage.setTitle("Portal"); 
     stage.setScene(new Scene(root)); 
     stage.show(); 

     // Controller gets a View and Model instance in initialize(); 
     // Error: Instantiation and Runtime Exception... 
     PortalController.INSTANCE.initialize(); 
    } 
} 

मैं अपने वर्तमान कॉन्फ़िगरेशन का उपयोग कर एक एमवीसी पैटर्न को सही तरीके से कैसे सेट अप करूं? क्या एक अलग वास्तुकला की आवश्यकता है?

उत्तर

23

आपका,
- देखें एक प्राथमिक Stage शुरू अप में JavaFX मंच द्वारा प्रदान की है। इस चरण में केवल Scene (आपने बनाया है और सेट किया है) जिसमें बदले में माता-पिता नोड सामग्री root (आपका चर) है। यह root नोड FXMLLoader द्वारा सेट किया गया है और "PortalUI.fxml" फ़ाइल में परिभाषित लेआउट/नोड संरचना का प्रतिनिधित्व करता है।
दूसरे शब्दों में Stage -> Scene -> PortalUI.fxml(root) दृश्य भाग को परिभाषित करेगा।

- नियंत्रक वर्ग कि Initializable लागू करता है और है कि आप fx के साथ अपने PortalUI.fxml फ़ाइल में निर्दिष्ट: नियंत्रक = "" विशेषता। जिस श्रेणी में आपने निर्दिष्ट किया है (पोर्टल नियंत्रक मुझे लगता है) बनाया जाएगा और FXMLLoader द्वारा initialize() विधि को बुलाया जाएगा। अर्थात् नियंत्रक बनाया जाएगा जब PortalUI.fxml फ़ाइल लोड हो जाती है, इसलिए आपको इसे स्वयं बनाने और प्रारंभ करने की आवश्यकता नहीं है। FXMLLoader से नियंत्रक के बनाए गए/प्रारंभिक उदाहरण को प्राप्त करने के लिए Accessing FXML controller class देखें।

- मॉडल नियंत्रक द्वारा संग्रहीत और प्रबंधित अंतर्निहित डेटा संरचना है। यह "डेटा" का प्रतिनिधित्व करने वाला कुछ भी हो सकता है। उदाहरण के लिए, व्यक्ति, पोर्टलइन्फो इत्यादि।

+0

हैलो! उत्तर के लिए धन्यवाद, लिंक भी एक महान संसाधन था! मेरे पास नियंत्रक तक पहुंच है और ओह! मुझे लगता है कि मैं इसे समझता हूं। यह मेरे द्वारा उपयोग किए जाने वाले कार्यों से एक बहुत ही अलग वास्तुकला है। मेरी सहायता करने के लिये आपका बहुत धन्यवाद :) – IAE