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

时间:2016-05-26 17:55:46

标签: java javafx pane loadimage

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

所需的布局

I want something like this

当前布局

but in javafx i cant get out of this

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

2 个答案:

答案 0 :(得分:1)

可以使用GridPane完成,但您必须指定列/行索引以防止Node放置在同一位置。< / p>

以下示例使用Rectangle来简化,但它适用于任何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),则使用默认列/行索引(0),除非使用GridPane.setConstraintsnode的属性中指定了其他位置,GridPane.setRowIndexGridPane.setColumnIndex

请注意BorderPane不是正确Parent显示彼此相邻的多个节点,除非它们适合顶部,左侧,中间,右侧和/或底部节点的“角色”(这不是在你的场景中就是这种情况。)

答案 1 :(得分:0)

尝试使用根节点中包含的HBox,该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);
}