如何实现 awt 的功能.我的javaFX 2.0应用程序中的CardLayout



在我的javaFX 2.0应用程序中,我需要替换使用awt的组件。卡片布局。卡片布局具有堆栈的功能,可显示堆栈中的顶部组件。我们也可以手动配置要显示的内容。

在javaFX 2.0中,有一个名为StackPane的布局。但它似乎不像卡片布局。

没有 CardLayout,但您可以使用 TabPane 或简单地切换组:

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

另一种选择是使用StackPane并将除当前Pane之外的所有内容的可见性设置为 false 。不理想,而是另一种思考问题的方式

使用 metasim 的答案,以下是完整的代码(也使按钮的行为更像切换按钮(:

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

最新更新