Wie kann ich die Funktionalität von Awt.CardLayout in meiner Javafx 2.0 -Anwendung implementieren?

StackOverflow https://stackoverflow.com/questions/8309802

  •  25-10-2019
  •  | 
  •  

Frage

In meiner JAVAFX 2.0 -App muss ich eine Komponente ersetzen, die awt.cardlayout verwendet wird. Cardlayout hat eine Funktionalität als Stapel, in der die oberste Komponente in Stack angezeigt wird. Und wir können auch manuell konfigurieren, welche angezeigt werden soll.

In Javafx 2.0 gibt es ein Layout namens StackPane. Aber es scheint nicht wie Cardlayout.

War es hilfreich?

Lösung

Es gibt keinen Cardlayout, aber Sie können Tabpane verwenden oder einfach Gruppen wechseln:

public void start(Stage stage) {

    VBox vbox = new VBox(5);

    Button btn = new Button("1");
    Button btn2 = new Button("2");

    final Pane cardsPane = new StackPane();
    final Group card1 = new Group(new Text(25, 25, "Card 1"));
    final Group card2 = new Group(new Text(25, 25, "Card 2"));

    btn.setOnAction(new EventHandler<ActionEvent>() {
        public void handle(ActionEvent t) {
            cardsPane.getChildren().clear();
            cardsPane.getChildren().add(card1);
        }
    });

    btn2.setOnAction(new EventHandler<ActionEvent>() {
        public void handle(ActionEvent t) {
            cardsPane.getChildren().clear();
            cardsPane.getChildren().add(card2);
        }
    });

    vbox.getChildren().addAll(btn, btn2, cardsPane);
    stage.setScene(new Scene(vbox));
    stage.setWidth(200);
    stage.setHeight(200);
    stage.show();

}

Andere Tipps

Eine andere Option ist die Verwendung a StackPane und setzen Sie die Sichtbarkeit aller außer dem Kurent Pane zu false. Nicht ideal, aber eine andere Art, über das Problem nachzudenken

Mithilfe von Metasims Antwort finden Sie hier den vollständigen Code (auch die Schaltflächen verhalten eher wie Schaltflächen):

public void start(Stage stage)
{

    VBox vbox = new VBox(5);

    RadioButton btn = new RadioButton("1");
    RadioButton btn2 = new RadioButton("2");

    ToggleGroup group = new ToggleGroup();
    btn.setToggleGroup(group);
    btn2.setToggleGroup(group);

    btn.getStyleClass().remove("radio-button");
    btn.getStyleClass().add("toggle-button");        


    btn2.getStyleClass().remove("radio-button");
    btn2.getStyleClass().add("toggle-button");        

    final Pane cardsPane = new StackPane();
    final Group card1 = new Group(new Text(25, 25, "Card 1"));
    final Group card2 = new Group(new Text(25, 25, "Card 2"));

    cardsPane.getChildren().addAll(card1, card2);
    btn.setOnAction(new EventHandler<ActionEvent>()
    {
        public void handle(ActionEvent t)
        {
            showNodeHideNodes(cardsPane.getChildren(), card1);
        }
    });

    btn2.setOnAction(new EventHandler<ActionEvent>()
    {
        public void handle(ActionEvent t)
        {
            showNodeHideNodes(cardsPane.getChildren(), card2);
        }
    });

    vbox.getChildren().addAll(btn, btn2, cardsPane);
    stage.setScene(new Scene(vbox));
    stage.setWidth(200);
    stage.setHeight(200);
    stage.show();

}

private static void showNodeHideNodes(List<Node> nodes, Node nodeToShow)
{
    for (Node node : nodes)
    {
        if (node.equals(nodeToShow))
        {
            node.setVisible(true);
        } else
        {
            node.setVisible(false);
        }
    }

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top