Wie kann ich die Funktionalität von Awt.CardLayout in meiner Javafx 2.0 -Anwendung implementieren?
-
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.
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);
}
}
}