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

使用数字和字母调整国际象棋棋盘JavaFX的大小

幸阳波
2023-03-14

我正在尝试使用JavaFX制作一个棋盘。我想看起来像这张图片:在这里输入图像描述

package sample;

import javafx.application.Application;
import javafx.geometry.HPos;
import javafx.geometry.VPos;
import javafx.scene.Scene;
import javafx.scene.control.Control;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.RowConstraints;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {
        GridPane root = new GridPane();
        final int size = 8 ;
        for (int row = 0; row < size; row++) {
            for (int col = 0; col < size; col ++) {
                StackPane square = new StackPane();
                String color ;
                if ((row + col) % 2 == 0) {
                    color = "white";
                } else {
                    color = "black";
                }
                square.setStyle("-fx-background-color: "+color+";");
                root.add(square, col, row);
            }
        }
        for (int i = 0; i < size; i++) {
            root.getColumnConstraints().add(new ColumnConstraints(5, Control.USE_COMPUTED_SIZE, Double.POSITIVE_INFINITY, Priority.ALWAYS, HPos.CENTER, true));
            root.getRowConstraints().add(new RowConstraints(5, Control.USE_COMPUTED_SIZE, Double.POSITIVE_INFINITY, Priority.ALWAYS, VPos.CENTER, true));
        }
        primaryStage.setScene(new Scene(root, 400, 400));
        primaryStage.show();
    }

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

在这个程序中,我定义了一个常数(大小)来决定棋盘的大小。它也可以从2到16(大小)的变化。如你所见,底面的字母不见了,右边的数字不见了。我如何添加它们?

共有1个答案

洪昱
2023-03-14

我并不真正理解您的评论,但您可以简单地向GridPane添加另一列和另一行。用数字填充第一列。用字母填充最后一行。

package sample;

import javafx.application.Application;
import javafx.geometry.HPos;
import javafx.geometry.VPos;
import javafx.scene.Scene;
import javafx.scene.control.Control;
import javafx.scene.control.Label;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.RowConstraints;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        GridPane root = new GridPane();
        final int size = 8 ;
        for (int row = 0; row < size; row++) {
            for (int col = 0; col <= size; col ++) {
                StackPane square = new StackPane();
                if (col == 0) {
                    Label label = new Label(String.valueOf(row + 1));
                    square.getChildren().add(label);
                }
                else {
                    String color;
                    if ((row + col) % 2 == 0) {
                        color = "white";
                    }
                    else {
                        color = "black";
                    }
                    square.setStyle("-fx-background-color: "+color+";");
                }
                root.add(square, col, row);
            }
        }
        StackPane square = new StackPane();
        Label label = new Label("A");
        square.getChildren().add(label);
        root.add(square, 1, 8);
        square = new StackPane();
        label = new Label("B");
        square.getChildren().add(label);
        root.add(square, 2, 8);
        square = new StackPane();
        label = new Label("C");
        square.getChildren().add(label);
        root.add(square, 3, 8);
        square = new StackPane();
        label = new Label("D");
        square.getChildren().add(label);
        root.add(square, 4, 8);
        square = new StackPane();
        label = new Label("E");
        square.getChildren().add(label);
        root.add(square, 5, 8);
        square = new StackPane();
        label = new Label("F");
        square.getChildren().add(label);
        root.add(square, 6, 8);
        square = new StackPane();
        label = new Label("G");
        square.getChildren().add(label);
        root.add(square, 7, 8);
        square = new StackPane();
        label = new Label("H");
        square.getChildren().add(label);
        root.add(square, 8, 8);
        for (int i = 0; i <= size; i++) {
            root.getColumnConstraints().add(new ColumnConstraints(5, Control.USE_COMPUTED_SIZE, Double.POSITIVE_INFINITY, Priority.ALWAYS, HPos.CENTER, true));
            root.getRowConstraints().add(new RowConstraints(5, Control.USE_COMPUTED_SIZE, Double.POSITIVE_INFINITY, Priority.ALWAYS, VPos.CENTER, true));
        }
        primaryStage.setScene(new Scene(root, 450, 400));
        primaryStage.show();
    }

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

这就是我运行它时的样子。

 类似资料:
  • 我已经有一个Board对象,包含一个碎片列表。Piece是一个抽象类,有一个位置(x,y)和一个颜色(黑色或白色)。然后是King、Queen、Knight这三个类,实现了Piece类。 谢谢

  • 我刚刚学习了Android和Java编程(里面非常noob),我想问一些关于Android编程和Socket服务器的问题。 我得到一个任务,创建一个简单的国际象棋应用程序(不包括AI),棋子的位置将从TCP套接字中检索: 服务器:xinuc.org 端口:7387 我被告知使用Socket Persistent,因为服务器会在每秒更新典当的位置,典当的位置将以这种格式发送 [卒典][横位][竖位]

  • DreamChess 是一款开放源码、跨平台(可在 Windows、Mac OS X 及 Linux 上运行)的 3D 国际象棋游戏。该游戏包含自身的引擎 Dreamer,提供各种国际象棋棋盘,并具有背景音乐及声效等其他附属功能。

  • 本文向大家介绍python输出国际象棋棋盘的实例分享,包括了python输出国际象棋棋盘的实例分享的使用技巧和注意事项,需要的朋友参考一下 国际象棋是当今国际上最流行的智力体育运动项目。青年人下棋可以锻炼思维、增强记忆力和培养坚强的意志;中年人下棋可以享受美学;老年下棋可以很好的休息娱乐。国际象棋游戏有自己的规则,需要两个人将棋子落在棋盘上。 棋子落在棋盘上事件,在计算机看来,是一段程序,而这些程

  • 我正在使用在固定深度工作的alpha-beta修剪算法对Chess AI进行编程。我相当惊讶地看到,通过将AI设置为更高的深度,它玩得更糟。但我认为我想通了为什么会这样。 它目前是这样工作的:所有的职位都被列出来了,对于每个职位,其他的职位都会被列出来,以此类推。。。直到达到固定深度:通过检查存在哪些工件,并为每种工件类型设置一个值来评估电路板。然后,使用带有alpha-beta的minimax算

  • 本文向大家介绍Javafx实现国际象棋游戏,包括了Javafx实现国际象棋游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Javafx实现国际象棋游戏的具体代码,供大家参考,具体内容如下 基本规则 棋子马设计“日”的移动方式 兵设计只能向前直走,每次只能走一格。但走第一步时,可以走一格或两格的移动方式 请为后设计横、直、斜都可以走,步数不受限制,但不能越子的移动方式。 车只能横向