将 2 个或更多图像添加到窗格 Javafx 时遇到问题
trouble adding 2 or more images to the pane Javafx
我正在 javafx 中编写 BlackJack 的简单版本,但我猜我迷路了!当我点击点击按钮时,我需要在 2 行中显示卡片。
单击按钮时如何连续添加不同的图像?我尝试使用 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);
}
尝试使用根节点中包含的 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
被放在同一个位置。
为简单起见,以下示例使用 Rectangle
s,但它适用于任何 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 底部节点(在您的场景中不是这种情况)。
我正在 javafx 中编写 BlackJack 的简单版本,但我猜我迷路了!当我点击点击按钮时,我需要在 2 行中显示卡片。
单击按钮时如何连续添加不同的图像?我尝试使用 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);
}
尝试使用根节点中包含的 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
被放在同一个位置。
为简单起见,以下示例使用 Rectangle
s,但它适用于任何 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 底部节点(在您的场景中不是这种情况)。