How can I implement the functionality of awt.CardLayout in my javaFX 2.0 application?

前端 未结 3 488
鱼传尺愫
鱼传尺愫 2020-12-06 10:24

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

相关标签:
3条回答
  • 2020-12-06 10:56

    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();
    
    }
    
    0 讨论(0)
  • 2020-12-06 11:04

    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

    0 讨论(0)
  • 2020-12-06 11:20

    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);
            }
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题