Frage

Ich probiere eine JavaFX2.0 -Anwendung in Bezug auf das Ensemble -Beispiel aus. Wie Ensemble möchte ich auch verschiedene Seiten anzeigen, aber basierend auf Klicks auf der Mitte. Ich habe keinen Baum, eine Symbolleiste usw. Ich möchte nur, dass eine Reihe von Seiten basierend auf einer bestimmten Auswahl angezeigt werden. Beispiel: Meine Hauptseite hat möglicherweise 6 Schaltflächen, auf Btn1 klicken. Ich möchte Seite1, Seite 2 auf BTN2 -Klicken und so weiter. Auf Seite1 werde ich wieder einige Schaltflächen und eine Rückkehr zur Rückkehr zur vorherigen Seite haben. In normalem Java konnten wir dies leicht mit Cardlayout erreichen. Fügen Sie alle übergespäteten Karten hinzu und zeigen Sie die gewünschte Seite.

Als ich mir das Feinbemble -Projekt ansah, sah ich, dass alle Beispielseiten wie "AnchorLayout, Colorbutton usw." alle die Probe erweitern. Und Seitenklassen haben Mitglieder von AllpagesSpage, Samplespage, DocPage usw., die alle in Treeview auf der linken Seite angezeigt werden.

Ich habe ein Beispiel hinzugefügt, das den Bereich erweitert und ein anderes Klassendatapan erstellt, das die Probe erweitert. Eine dritte Klasse, die die Referenz aller Pane hat:

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;

}

}

Um den Referenz zu speichern, basierend auf dem Namen, den ich verwendet habe, habe ich HashMap verwendet. Wie richte ich in meiner Anwendungsklasse die Seite als Datapane ein?

    @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 enthält nur Code von Anchorpanesample im Konstruktor. Nichts mehr oder keine anderen Funktionen - nur Konstruktor.

Wie soll ich die Bühne bekommen und Seiten auf Call to Gotopage (String Page) -Methode festlegen ???

War es hilfreich?

Lösung

Erstellen Sie einfach einen Bereich, in dem Sie Ihre Scheiben sehen und diese ändern möchten:

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);
        }
    }
}

Möglicherweise möchten Sie Ihre AllpagesSpage -Klasse aktualisieren:

  • Die Validierung in getPage () ist überflüssig, HashMap wird es für Sie tun
  • Anstelle von statischen Zeichenfolgen möchten Sie möglicherweise Enum für eine bessere Flexibilität verwenden (es ermöglicht Iteration, einfacher Vergleich, einfacher Refactoring und andere).
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top