我正在javafx中编写一个简单版本的BlackJack,但我想我失去了回家的路!当我点击按钮时,我需要在两行中显示卡片。
单击按钮时如何连续添加不同的图像?我尝试使用GridPane
和BorderPane
,但图片显示在同一个地方......我知道每次按下按钮我都需要一个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);
}
答案 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.setConstraints
在node
的属性中指定了其他位置,GridPane.setRowIndex
或GridPane.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);
}