将 2 个或更多图像添加到窗格 Javafx 时遇到问题

trouble adding 2 or more images to the pane Javafx

我正在 javafx 中编写 BlackJack 的简单版本,但我猜我迷路了!当我点击点击按钮时,我需要在 2 行中显示卡片。 单击按钮时如何连续添加不同的图像?我尝试使用 GridPaneBorderPane 但图像显示在同一个地方......我知道每次按下按钮时我都需要一个 for 循环但我不知道该怎么做它..我在 java swing 中制作了同样的游戏并且很顺利

所需布局

当前布局

这是我的loadImage方法

    public void ImageloadP(Card xPCard) {
        String xP = xPCard.toString();
        Image card = new Image("file:/Users/cetabije/Desktop/Apa/src/cards.png/" + xP + ".png");
        ImageView xPv = new ImageView(card);
        xPv.setFitHeight(140);
        xPv.setFitWidth(95);
        root.getChildren().add(xPv);
    }

尝试使用根节点中包含的 HBox,它在调用 ImageLoadP 方法之前已初始化。

https://docs.oracle.com/javase/8/javafx/api/javafx/scene/layout/HBox.html

http://www.java2s.com/Tutorials/Java/JavaFX/0300__JavaFX_HBox.htm

private HBox box;

public void initialize() { 
    box = new HBox();
    root.getChildren().add(box);
}

public void ImageloadP(Card xPCard) { 
    String xP = xPCard.toString();
    Image card = new Image("file:/Users/cetabije/Desktop/Apa/src/cards.png/" + xP + ".png");
    ImageView xPv = new ImageView(card);
    xPv.setFitHeight(140);
    xPv.setFitWidth(95);

    box.getChildren().add(xPv);
}

这个 可以 GridPane 完成,但是你必须指定 column/row 索引以防止 Node 被放在同一个位置。

为简单起见,以下示例使用 Rectangles,但它适用于任何 Node 类型:

private Color color = Color.BLACK;

@Override
public void start(Stage primaryStage) {
    GridPane gridPane = new GridPane(); 
    gridPane.setHgap(10);
    gridPane.setVgap(10);
    Button btn = new Button("Add Rect");

    // add node specifying column and row index
    gridPane.add(btn, 0, 0);

    gridPane.setStyle("-fx-background-color: lime;");

    btn.setOnAction((ActionEvent event) -> {
        color = color.brighter();
        Rectangle rectangle = new Rectangle(20, 20);
        rectangle.setFill(color);

        // append rect to second row
        gridPane.addRow(1, rectangle);
    });

    Scene scene = new Scene(gridPane, 500, 500);

    primaryStage.setScene(scene);
    primaryStage.show();
}

请注意,如果您使用 gridPane.getChildren().add(node),则使用默认的 column/row 索引 (0),除非在 node 的属性中使用 GridPane.setConstraints, GridPane.setRowIndex or GridPane.setColumnIndex

请注意 BorderPane 不是正确的 Parent 显示多个节点并排显示,除非它们符合 "role" 上、左、中、右 and/or 底部节点(在您的场景中不是这种情况)。