[Javafx] एक ही दृश्य में नया Fxml लोड हो रहा है


Answers

मैं इस बारे में निश्चित नहीं हूं कि यह कैसे प्रभावी है, लेकिन लगता है कि यह ठीक है और क्या है, ऊपर की विधियों के लिए बहुत सरल।

https://www.youtube.com/watch?v=LDVztNtJWOo

जहां तक ​​मुझे ये समझा जाता है कि यहां क्या हो रहा है, यह (यह वास्तव में स्टार्ट () विधि में आवेदन वर्ग में क्या हो रहा है, से जुड़ा है):

private void buttonGoToWindow3Action(ActionEvent event) throws IOException{
    Parent window3; //we need to load the layout that we want to swap
    window3 = (StackPane)FXMLLoader.load(getClass().getResource("/ScenePackage/FXMLWindow3"));

    Scene newScene; //then we create a new scene with our new layout
    newScene = new Scene(window3);

    Stage mainWindow; //Here is the magic. We get the reference to main Stage.
    mainWindow = (Stage)  ((Node)event.getSource()).getScene().getWindow();

    mainWindow.setScene(newScene); //here we simply set the new scene
}

हालांकि, मैं एक जावा विशेषज्ञ नहीं हूं और प्रोग्रामिंग के लिए काफी नया हूं इसलिए यह अच्छा होगा अगर कोई अनुभवी व्यक्ति इसका मूल्यांकन करेगा।

संपादित करें: Ive भी आसान तरीका पाया;

मेन एप्लिकेशन्स क्लास पर जाएं और स्थैतिक स्टेज पेरेंट विन्डो बनाएं।

public static Stage parentWindow;
@Override
public void start(Stage stage) throws Exception {
    parentWindow = stage;

    Parent root = FXMLLoader.load(getClass().getResource("/ScenePackage/FXMLMainScene.fxml"));

    Scene scene = new Scene(root);

    stage.setScene(scene);
    stage.show();
}

अब आप अपने मुख्य स्टेज पर एक कार्यक्रम में इतनी कहीं भी पहुंच सकते हैं कि आप इस दृश्य को बदलने के लिए ऐसा कुछ कर सकते हैं:

    Parent window1;
    window1 = FXMLLoader.load(getClass().getResource("/ScenePackage/FXMLWindow1.fxml"));

    //Scene newSceneWindow1 = new Scene(window1);

    Stage mainStage;
    //mainStage = (Stage)  ((Node)event.getSource()).getScene().getWindow();
    mainStage = MainApplication.parentWindow;
    mainStage.getScene().setRoot(newSceneWindow1); //we dont need to change whole sceene, only set new root.
Question

मेरे पास 2 एफएक्सएमएल फाइल हैं:

  • लेआउट (हेडर, मेनूबार और सामग्री)
  • Anchorpane (यह अन्य fxml फ़ाइल से सामग्री के अंदर रखा जाना चाहिए)

मैं जानना चाहूंगा कि मैं "मास्टर" दृश्य से सामग्री स्थान के अंदर दूसरी फ़ाइल कैसे लोड कर सकता हूं। और क्या यह है कि जावा एफएफ़एफ़ में काम करने के लिए एक अच्छी बात है या क्या यह एक नया दृश्य लोड करना बेहतर है?

मैं ऐसा कुछ करने की कोशिश कर रहा हूं, लेकिन यह काम नहीं करता है:

@FXML
private AnchorPane content;

@FXML
private void handleButtonAction(ActionEvent event) {        
    content = (AnchorPane) FXMLLoader.load("vista2.fxml");
}

सहायता के लिए धन्यवाद।




इस में गड़बड़ी भी हुई, अधिकांश जवाबों की कोशिश की, जो मैं चाहता था वह नहीं था, इसलिए मैंने ऐसा करने के लिए दिए गए आदर्शों का इस्तेमाल किया:

public class Main extends Application {
public static Stage homeStage;
@Override
public void start(Stage primaryStage) throws Exception{
    homeStage = primaryStage;
    Parent root = FXMLLoader.load(getClass().getResource("mainView.fxml"));
    root.getStylesheets().add(getClass().getResource("stylesheet/custom.css").toExternalForm());
    homeStage.setTitle("Classification of Living Organisms");
    homeStage.setScene(new Scene(root, 600, 500));
    homeStage.show();
}


public static void main(String[] args) {
    launch(args);
  }
}

यह मेरा मुख्य वर्ग है लैंडिंग विंडो / पृष्ठ mainView.fxml के साथ मुख्य जावा। @ थोमाज विचार का एक छोटा सा प्रयोग किया, हालांकि मेरे मुख्य नियंत्रक.जावा वर्ग में यह करने से पहले मुझे एक लिल भ्रमित किया गया था:

public void gotoSubMenu(Event event) {
    Parent window1;
    try {
        window1 = FXMLLoader.load(getClass().getResource("src/displayView.fxml"));
        Stage window1Stage;
        Scene window1Scene = new Scene(window1, 600, 500);
        window1Stage = Main.homeStage;
        window1Stage.setScene(window1Scene);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

'विंडो 1' नामक एक नए माता-पिता विंडो को बनाया, जो कि 'एसडीआरसी डाइरेक्टरी' में 'डिस्प्ले व्हिव। एफएक्सएमएल' नामक दूसरी एफएक्सएमएल फ़ाइल लोड की गई। मुख्य दृश्य चरण के एक ऑब्जेक्ट का निर्माण किया और इस दृश्य को नव निर्मित दृश्य में सेट किया गया जिसकी रूट विंडो 1 है। आशा है कि ये # जावाएफ़एक्स में आने वाले लोगों को मदद करता है




मुखौटा का मेरा उदाहरण

का उपयोग करते हुए:

Main.getNavigation().load(View2.URL_FXML).Show();
Main.getNavigation().GoBack();