In my javaFX 2.0 app, I need to replace a component which is used awt.CardLayout. Cardlayout has a functionality as a stack which displays the top component in stack. And al
There is no CardLayout, but you can use TabPane or simply switch groups:
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();
}
Another option is to use a StackPane and set the visibility of all but the curent Pane to false. Not ideal, but another way of thinking about the problem
Using metasim's answer, here is the full code (also made the buttons act more like toggle buttons):
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);
}
}
}