0

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

所需布局

我想要这样的东西

当前布局

但是在javafx中我无法摆脱这个

这是我的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);
    }
4

2 回答 2

1

可以通过 a 来完成GridPane,但您必须指定列/行索引以防止将Nodes 放置在同一位置。

为了简单起见,以下示例使用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)默认的列/行索引 ( ),除非在using0的属性中分配了不同的位置,或者nodeGridPane.setConstraintsGridPane.setRowIndexGridPane.setColumnIndex

请注意,将多个节点彼此相邻显示BorderPane是不正确的,除非它们适合顶部、左侧、中心、右侧和/或底部节点的“角色”(在您的场景中并非如此)。Parent

于 2016-05-26T19:08:06.623 回答
0

尝试使用根节点中包含的 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);
}
于 2016-05-26T18:00:04.887 回答