javaFX

2013-06-21 17 views
6

में दृश्य स्विचिंग वर्तमान दृश्य को बंद करने का प्रयास करते समय मुझे समस्या है और मेनू इटैम का चयन करते समय एक और दृश्य खोलें। मेरे मुख्य मंच से नीचे रूप में कोडित है:javaFX

public void start(Stage primaryStage) throws Exception { 
    primaryStage.setTitle("Shop Management"); 
    Pane myPane = (Pane)FXMLLoader.load(getClass().getResource 
("createProduct.fxml")); 
    Scene myScene = new Scene(myPane);   
    primaryStage.setScene(myScene); 
    primaryStage.show(); 
} 

फिर createProduct.fxml भीतर, जब MENUITEM onclick है, यह इस प्रदर्शन करेंगे:

public void gotoCreateCategory(ActionEvent event) throws IOException { 
    Stage stage = new Stage(); 
    stage.setTitle("Shop Management"); 
    Pane myPane = null; 
    myPane = FXMLLoader.load(getClass().getResource("createCategory.fxml")); 
    Scene scene = new Scene(myPane); 
    stage.setScene(scene); 
    stage.show(); 
} 

यह createCategory.fxml खोल दिया है। हालांकि, पिछले पैनल जो createProduct.fxml है बंद नहीं होता है। मुझे पता है कि ऐसा करने के लिए stage.close() कहा जाता है लेकिन मुझे नहीं पता कि इसे कहां कार्यान्वित किया जाए क्योंकि मैं शुरुआत से मुख्य दाएं से दृश्य को पार नहीं कर रहा हूं। मुझे आश्चर्य है कि मुझे इसे कैसे ठीक करना चाहिए।

अग्रिम धन्यवाद।

+0

क्या आप वाकई नए चरण में अन्य स्क्रीन (createCategory.fxml) खोलना चाहते हैं? –

+0

मैं ऐसा करने की कोशिश कर रहा हूं जैसे आप Jframe जानते हैं? GetJFrame()। निपटान(); \t \t \t \t \t \t \t eForumForgotPwd MyWindow = नए eForumForgotPwd(); । \t \t \t \t \t \t \t myWindow.getJFrame() setVisible (सही); मुझे नया –

उत्तर

11

आप शुरू विधि, की तरह में कुछ परिवर्तन करने की आवश्यकता ..

public void start(Stage primaryStage) throws Exception { 
    primaryStage.setTitle("Shop Management"); 

    FXMLLoader myLoader = new FXMLLoader(getClass().getResource("createProduct.fxml")); 

    Pane myPane = (Pane)myLoader.load(); 

    CreateProductController controller = (CreateProductController) myLoader.getController(); 

    controller.setPrevStage(primaryStage); 

    Scene myScene = new Scene(myPane);   
    primaryStage.setScene(myScene); 
    primaryStage.show(); 
} 

और अपने CreateProductController.java हो जाएगा,

public class CreateProductController implements Initializable { 

    Stage prevStage; 

    public void setPrevStage(Stage stage){ 
     this.prevStage = stage; 
    } 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
    } 

    public void gotoCreateCategory(ActionEvent event) throws IOException { 
     Stage stage = new Stage(); 
     stage.setTitle("Shop Management"); 
     Pane myPane = null; 
     myPane = FXMLLoader.load(getClass().getResource("createCategory.fxml")); 
     Scene scene = new Scene(myPane); 
     stage.setScene(scene); 

     prevStage.close(); 

     stage.show(); 
    } 

} 
+0

वाह धन्यवाद खोलने से पहले वर्तमान विंडो को बंद करने की आवश्यकता है। यह पूरी तरह से काम किया। वास्तव में बहुत बहुत धन्यवाद। इसलिए मूल रूप से आप प्राथमिक स्तर को पाने के लिए नियंत्रक में setPreviousStage विधि में प्राथमिक स्तर को पास करते हैं। और फिर आप इसे बंद कर देते हैं? क्या मैंने सही तरीके से समझाया है? –

+0

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

+0

अपने टेक्स्टफील्ड पर सत्यापन जोड़ें, और शून्य के लिए जांचें। –

2

आप अपनी समस्या को हल करने के लिए कई तरीके हैं, के कुछ है वे मैं आपको बताता हूँ। जो मैं आपके प्रश्न से समझता हूं वह यह है कि आप एक ऐसा ऐप्लिकेशन बनाना चाहते हैं जिसमें शीर्ष पर नेविगेशन (मेनू बार) है और इसका उपयोग करके उपयोगकर्ता किसी भी स्क्रीन पर स्विच कर सकता है।

सबसे आसान तरीका अपने नेविगेशन बार दुनिया में उपलब्ध कराना है, या तो आप इसे स्थिर बनाने या इसे स्क्रीन के लिए पारित करके, या किसी अन्य विधि द्वारा द्वारा। दूसरा, एक स्क्रीन बनाएं (सीमा फलक कहें) और उस पर अन्य स्क्रीन लोड करें (इसका केंद्र)।

तुम भी परियोजना में वसंत एकीकरण इतना है कि यह आप नियंत्रकों के बेहतर इंजेक्शन उपलब्ध कराने का उपयोग कर सकते हैं। रेफरी देखें: http://www.zenjava.com/2011/10/25/views-within-views-controllers-within-controllers/

आप अपना स्वयं का ही स्क्रीन नियंत्रक का उपयोग अन्य स्क्रीन बनाने और प्रबंधित कर सकते हैं। देखें रेफरी: https://blogs.oracle.com/acaicedo/entry/managing_multiple_screens_in_javafx1

लेकिन इस (ऊपर) आप बदल सकते हैं या अपने वर्तमान वास्तुकला अपडेट करना पड़ता है के लिए।

+0

तो मूल रूप से कक्षा जिसमें प्रारंभ विधि शामिल है केवल डिफ़ॉल्ट पृष्ठ को चलाने के लिए सेट है? और डिफ़ॉल्ट पृष्ठ से, मैंने नेविगेशन बार को स्थिर और सेट किया है? –

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