当前位置: 首页 > 知识库问答 >
问题:

JAVAFX在矩形顶部显示图像

锺离声
2023-03-14

我正在用Java和JAVAFX开发一个国际象棋游戏。我的棋盘是一个JAVAFX组,包含一个正方形数组。我的正方形继承自JAVAFX rectangle类。我想在这些方块里面画一个图像(棋子的图像),但是我似乎找不到方法。当我使用setfill来绘制图案时,正方形的颜色消失了,这不是我想要的,我希望图像是透明的,并绘制在每个正方形的顶部。有什么想法吗?

共有1个答案

爱刚捷
2023-03-14

要将图像放置在形状的顶部,可以将它们封装在<code>堆栈窗格中:

import javafx.application.Application;
import javafx.geometry.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.image.*;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class Chess extends Application {

    private final String[] COLORS = {"black","white"};
    private static int ROWS = 4, COLS = 4;

    @Override
    public void start(Stage stage) {

        Board board = new Board(COLS);

        int tileNum = 0;

        for(int row = 0; row < ROWS ; row++){
            tileNum = tileNum == 0 ? 1:0;
            for(int col = 0; col < COLS; col++){
                Tile tile = new Tile(COLORS[tileNum]);
                if(row==ROWS/2 && col == COLS/2) {//place an arbitrary piece
                    tile.setPiece(Pieces.KING.getImage());
                }
                board.addTile(tile.getTile());
                tileNum = tileNum == 0 ? 1:0;
            }
        }

        Parent root = new Group(board.getBoard());
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

class Board {

    private final TilePane board;

    public Board(int columns) {
        board = new TilePane(Orientation.HORIZONTAL);
        board.setPrefColumns(columns);
        board.setTileAlignment(Pos.CENTER);
        board.setStyle("-fx-border-color:red;");
    }

    Pane getBoard(){
        return board;
    }

    void addTile(Node node){
        board.getChildren().add(node);
    }
}

class Tile {

    public static final int SIZE = 100;
    private final StackPane tile;

    Tile(String colorName) {
        this(colorName, null);
    }

    Tile(String colorName, Image piece) {
        Rectangle rect = new Rectangle(SIZE, SIZE, Color.valueOf(colorName));
        tile = new StackPane(rect);
        tile.setStyle("-fx-border-color:red;");
        if(piece != null) {
            setPiece(piece);
        }
    }

    void setPiece(Image piece){
        tile.getChildren().add(new ImageView(piece));
    }

    public Node getTile() {
        return tile;
    }
}

enum Pieces {

    KING ("https://cdn3.iconfinder.com/data/icons/softwaredemo/PNG/64x64/Circle_Blue.png"),
    QUEEN ("https://cdn3.iconfinder.com/data/icons/softwaredemo/PNG/64x64/Circle_Orange.png");

    private String image;
    private Pieces(String image) {
        this.image = image;
    }

    public Image getImage(){
        return new Image(image);
    }
}

将磁贴的表示更改为JavaFx控件(例如LabelButton)非常简单。您需要做的就是对Tile进行一些小更改:

class Tile {

    public static final int SIZE = 100;
    private final Label tile;//a Button if you need it clickable

    Tile(String colorName) {
        this(colorName, null);
    }

    Tile(String colorName, Image piece) {
        tile = new Label();
        tile.setPrefSize(SIZE, SIZE);
        tile.setStyle("-fx-border-color:red; -fx-background-color:"+colorName);
        tile.setAlignment(Pos.CENTER);
        if(piece != null) {
            setPiece(piece);
        }
    }

    void setPiece(Image piece){
        tile.setGraphic(new ImageView(piece));
    }

    public Node getTile() {
        return tile;
    }
}
 类似资料:
  • 我是Python新手。我想在下图中显示每个箱上方的值: 这是我的代码: 这是我想要的图表:

  • 当使用dialogFragment时,我在片段顶部得到一个空白矩形,而不知道为什么。 我的对话片段: select_frag.xml

  • 此外,我已经把我的矩形在锚窗,如果这是重要的知道。

  • 请参阅此小提琴:https://jsfiddle.net/4mxhogmd/1/ 我正在做图表。js如果您在fiddle中看到,您会注意到,在某些情况下,位于条形图顶部的值没有正确显示(超出画布),而我在研究如何在图表上显示数据值时遇到了这个链接。js 但在这里,他们也在同样的情况下使用工具提示来调整条内的文本。我不要这个。 我想要的是,在所有情况下,只在顶部显示值。

  • 在JavaFX中,我怎么能让一个矩形闪烁到视图之外。 我正在制作一个单词搜索游戏,我有一个随机的2D数组。我正在将此数组打印到600x600画布上,如下所示: 我也有一个正方形绘制在同一画布上,就像这样: 这意味着我可以通过增加和来移动正方形。这给了:这个。 现在唯一的问题是,我需要一个矩形来闪烁,这样当选中时,下面的字母仍然可见。我该怎么做?我尝试将颜色设置为不透明,但这也会导致游戏板的其他部分

  • 我刚开始使用JavaFX,有一个问题。在我的项目中,我想使用旋转矩形。但矩形只围绕其中心旋转,我希望它围绕其左上角旋转。 就像这张照片(从这里开始): 下面是我的项目中的一些代码: 在这种情况下,如果按下箭头键,矩形会旋转。