Question

Je suis en train une application JavaFX2.0 en référence à l'échantillon Ensemble. Comme Ensemble, je veux aussi montrer différentes pages, mais en fonction des clics effectués sur la page centrale. Je n'ai pas d'arbre, barre d'outils, etc. Je veux juste un ensemble de pages à afficher en fonction d'une sélection particulière. Exemple: ma page principale peut avoir 6 boutons, sur cliquant btn1 Je veux Page1, Page2 sur clic BTN2 et ainsi de suite. Sur Page1, je aurai de nouveau quelques boutons et un retour pour revenir à la page précédente. En Java normal, nous pourrions y parvenir facilement à l'aide CardLayout. Ajouter tous paginée aux cartes et afficher la page désirée.

En regardant projet Enemble, j'ai vu que toutes les pages d'exemples comme « AnchorLayout, ColorButton, etc » ils étendent tous les échantillons. Et la classe Pages a des membres de AllPagesPage, SamplesPage, DocPage, etc qui sont tous présentés en TreeView sur le côté gauche.

I a ajouté l'échantillon qui prolonge le volet, créer un autre DataPane de classe qui étend l'échantillon. Une 3ème classe qui a la référence de tous les volets:

public class AllPagesPage {
HashMap<String, Sample> pages = null; 
private static String DATAPANE = "DATAPANE";

public AllPagesPage() {
    pages = new HashMap<String, Sample>();
    addPages();
}

private void addPages() {
    pages.put(DATAPANE, (Sample)new DataPane());
}

public Sample getPage(String page) {
    if (pages.containsKey(page))
        return (Sample) pages.get(page);

    return null;

}

}

Pour enregistrer la refernce en fonction du nom que j'ai utilisé HashMap. Maintenant, dans ma classe d'application, comment configurer je la page DataPane?

    @Override
public void start(Stage primaryStage) {
    primaryStage.setTitle("Hello World");
    Group root = new Group();
    Scene scene = new Scene(root, 300, 250);
    /*
    Button btn = new Button();
    btn.setLayoutX(100);
    btn.setLayoutY(80);
    btn.setText("Hello World");
    btn.setOnAction(new EventHandler<ActionEvent>() {

        public void handle(ActionEvent event) {
            System.out.println("Hello World");
        }
    });
    root.getChildren().add(btn);
    * 
    */

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

// Should be called as gotoPage(AllPagesPage.DATAPANE), 
// on this command everythign else should be removed and contents of DataPane should come up.      
public void goToPage(String page) {

}

DataPane ne contient que le code de AnchorPaneSample dans le constructeur. Rien de plus ou pas d'autres fonctions -. Constructeur SEULEMENT

Comment dois-je obtenir les étapes et les pages de réglage sur appel à la méthode ???

gotoPage (page String)
Était-ce utile?

La solution

Il suffit de créer une zone où vous voulez voir vos vitres et de les changer:

public class Main extends Application {

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

    private Pane pagesArea;
    private AllPagesPage pages = new AllPagesPage();

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World");
        VBox root = new VBox();
        Scene scene = new Scene(root, 300, 250);

        Button btn = new Button();
        btn.setText("Open DataPane");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            public void handle(ActionEvent event) {
                goToPage(AllPagesPage.DATAPANE);
            }
        });
        root.getChildren().addAll(btn, pagesArea = new StackPane());
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public void goToPage(String page) {
        Pane pane = pages.getPage(page);
        if (pane != null) {
            pagesArea.getChildren().clear();
            pagesArea.getChildren().add(pane);
        }
    }
}

Vous pouvez mettre à jour votre classe AllPagesPage:

  • validation getPage () est redondant, HashMap le fera pour vous
  • au lieu de chaînes statiques que vous pouvez utiliser pour une meilleure flexibilité ENUM (il itération permettra, comparaison simple, plus facile refactoring et d'autres)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top