获取添加到网格窗格的按钮数组中的位置[x] [y]的值

雷纳塔·P·索扎(Renata P Souza)

我对网格窗格中添加的二维按钮数组中的位置的计算有疑问

类别位置[lin,col]

public class Position {

    private int lin;
    private char col;

    public Position(int lin, char col) {
        this.col = col;
        this.lin = lin;
    }

    @Override
    public String toString() {
        return col + "" + lin;
    }
}

GridPaneArrayButton类

public class GridPaneArrayButton extends Application {

    @Override
    public void start(Stage primaryStage) {

        Image[][] img1 = new Image[9][9];
        Image[][] img2 = new Image[9][9];

        GridPane root = new GridPane();
        root.setPadding(new Insets(5));
        root.setAlignment(Pos.CENTER);

        Label label = new Label("CHESS TABLE 8X8");
        label.setFont(Font.font("Cambria", FontWeight.BOLD, 18));
        GridPane.setColumnSpan(label, 10);
        GridPane.setRowSpan(label, 2);
        root.add(label, 0, 0);
        GridPane.setHalignment(label, HPos.CENTER);

        TextArea text = new TextArea();
        GridPane.setColumnSpan(text, 10);
        GridPane.setRowSpan(text, 2);
        root.setVgap(1);
        root.add(text, 0, 25);
        GridPane.setHalignment(text, HPos.CENTER);
        text.getStyleClass().add("text-area");

        Button[][] btn = new Button[8][8];

        boolean changeColor = false;

        for (int i = 0; i < btn.length; i++) {

            for (int j = 0; j < btn.length; j++) {


                btn[i][j] = new Button("", new ImageView(img1[i][j]));

                btn[1][j] = new Button("", new ImageView(img1[0][8]));

                btn[6][j] = new Button("", new ImageView(img2[7][8]));

                btn[7][j] = new Button("", new ImageView(img2[i][j]));

                if (changeColor == false) {
                    btn[i][j].getStyleClass().add("btn_color_lightgrey");
                } else {
                    btn[i][j].getStyleClass().add("btn_color_grey");
                }
                btn[i][j].setPrefSize(65, 65);
                root.add(btn[i][j], j, i + 2);
                btn[i][j].setOnMouseClicked((MouseEvent e) -> {

                    StringBuilder str = new StringBuilder();

                    str.append("Position Gridpane X: ").append(e.getX()).append("\n");
                    str.append("Position Gridpane Y: ").append(e.getY()).append("\n");

                    int x = (int) e.getX();
                    int y = (int) e.getY();

                    int rx = ((int) e.getX() % 8);
                    int ry = ((int) e.getY() % 8);

                    int lin = (x - rx) / 8;
                    int col = (y - ry) / 8;

                    str.append("Line X: ").append(lin).append("\n");
                    str.append("Col Y: ").append(convCol(col)).append("\n");
                    str.append("Position XY : ").append(new Position(lin, convCol(col))).append("\n");
                    str.append("\n-----------------------------------------------------------------------------\n\n");

                    text.appendText(str.toString());
                });
                changeColor = !changeColor;
            }
            changeColor = !changeColor;
        }

        Scene scene = new Scene(root, 900, 900);
       scene.getStylesheets().add(this.getClass().getResource("styles.css").toExternalForm());

        primaryStage.setTitle("Grid Pane Example");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static char convCol(int col) {
        switch (col) {
            case 1:
                return 'A';
            case 2:
                return 'B';
            case 3:
                return 'C';
            case 4:
                return 'D';
            case 5:
                return 'E';
            case 6:
                return 'F';
            case 7:
                return 'G';
            case 8:
                return 'H';
            default:
                return ' ';
        }
    }

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

运行后,我得到了这个结果,这是不正确的

在此处输入图片说明

目标是遵循这种逻辑

在此处输入图片说明

有什么建议?我将不胜感激。

乌鲁克·比(Uluk Biy)

考虑使用按钮将按钮的位置存储在按钮本身中Node.setUserData(),并消除了根据鼠标单击坐标来确定按钮的位置

// store the position
btn[i][j].setUserData( new Position( btn.length - i, convCol( j + 1 ) ) );

// get it on mouse click
btn[i][j].setOnMouseClicked( ( MouseEvent e ) -> {
    StringBuilder str = new StringBuilder();
    str.append( "Position XY : " ).append( (( Node ) e.getSource()).getUserData() ).append( "\n" );
    text.appendText( str.toString() );
} );

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

javafx将按钮添加到网格窗格

来自分类Dev

javafx将按钮添加到网格窗格

来自分类Dev

如何从X单元格中获取最后2个数字并将其添加到Y单元格中@之前?

来自分类Dev

如何从X单元格中获取最后2个数字并将它们添加到Y单元格中@之前?

来自分类Dev

如何标记顶点并将 x 和 y 值添加到坐标中?

来自分类Dev

添加到多维数组中的值

来自分类Dev

如何添加到数组中的值

来自分类Dev

将键添加到数组中,并根据数组的当前位置生成值

来自分类Dev

如何将数组的值添加到ArrayList中而不是该数组的位置?

来自分类Dev

将数组中的数组值添加到数组值

来自分类Dev

获取画布中填充像素位置的x和y值

来自分类Dev

遍历单元格并将值添加到数组中,然后在VBA中显示到活动单元格

来自分类Dev

对于范围中的每个单元格,如果满足条件,则将单元格值添加到数组

来自分类Dev

添加到数组并在数组中查找值

来自分类Dev

使用x:Static将值添加到xaml中的数组

来自分类Dev

使用x:Static将值添加到xaml中的数组

来自分类Dev

无法将值添加到y变量

来自分类Dev

C#在图表上添加到Y值

来自分类Dev

将按钮中的值添加到UILabel

来自分类Dev

如何从JFreeChart中的X值获取Y值

来自分类Dev

如何检查单元格值是否大于 X,从这两个值中获取差异并添加到 Excel 中的下一个单元格?

来自分类Dev

Gnuplot对相同x值的y值求和

来自分类Dev

gnuplot x最大值y的值

来自分类Dev

Gnuplot对相同x值的y值求和

来自分类Dev

(缩放)给定 x 值的 y 值

来自分类Dev

绘制多个Y值与X

来自分类Dev

将值添加到数组中的用户元字段

来自分类Dev

使用循环将自动值添加到数组中

来自分类Dev

将值添加到对象PHP中的数组

Related 相关文章

  1. 1

    javafx将按钮添加到网格窗格

  2. 2

    javafx将按钮添加到网格窗格

  3. 3

    如何从X单元格中获取最后2个数字并将其添加到Y单元格中@之前?

  4. 4

    如何从X单元格中获取最后2个数字并将它们添加到Y单元格中@之前?

  5. 5

    如何标记顶点并将 x 和 y 值添加到坐标中?

  6. 6

    添加到多维数组中的值

  7. 7

    如何添加到数组中的值

  8. 8

    将键添加到数组中,并根据数组的当前位置生成值

  9. 9

    如何将数组的值添加到ArrayList中而不是该数组的位置?

  10. 10

    将数组中的数组值添加到数组值

  11. 11

    获取画布中填充像素位置的x和y值

  12. 12

    遍历单元格并将值添加到数组中,然后在VBA中显示到活动单元格

  13. 13

    对于范围中的每个单元格,如果满足条件,则将单元格值添加到数组

  14. 14

    添加到数组并在数组中查找值

  15. 15

    使用x:Static将值添加到xaml中的数组

  16. 16

    使用x:Static将值添加到xaml中的数组

  17. 17

    无法将值添加到y变量

  18. 18

    C#在图表上添加到Y值

  19. 19

    将按钮中的值添加到UILabel

  20. 20

    如何从JFreeChart中的X值获取Y值

  21. 21

    如何检查单元格值是否大于 X,从这两个值中获取差异并添加到 Excel 中的下一个单元格?

  22. 22

    Gnuplot对相同x值的y值求和

  23. 23

    gnuplot x最大值y的值

  24. 24

    Gnuplot对相同x值的y值求和

  25. 25

    (缩放)给定 x 值的 y 值

  26. 26

    绘制多个Y值与X

  27. 27

    将值添加到数组中的用户元字段

  28. 28

    使用循环将自动值添加到数组中

  29. 29

    将值添加到对象PHP中的数组

热门标签

归档