0

我正在使用 GUI 构建一个棋盘(可能是棋盘游戏)。我创建了二维数组来制作像五子棋游戏这样的单元格。我想做这个功能:每当我单击一个单元格时,都会显示单元格位置。

private Cell[][] cells;
private in row;
private int col;

Update:
.......

JPanel pn = new JPanel(new GridLayout(row, col, 0, 0));
cells = new Cell[row][col];
for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            pn.add(cells[i][j] = new Cell());
        }
......
private class MouseListener extends MouseAdapter {

        public void mouseClicked(MouseEvent e) {
                    for (int i = 0; i < size; i++) {
                        for (int j = 0; j < size; j++) {
                            if (         ) {
                                System.out.println("X: " + i + ", Y: " + j);

                            }

                        }
                    }
            }

尽管我已经尝试了几次并且在不同的条件下,但我无法使其工作if

4

3 回答 3

1

您可以将您的MouseListener直接添加到单元格中并用于e.getSource()获得点击单元格。

于 2013-07-22T05:35:32.263 回答
0

if您的语句中应该有一个命中测试函数调用。命中测试函数应该从鼠标坐标转换为当前 (i,j) 位置的单元坐标,并返回一个简单的trueor false。(一旦你得到 a true,你就可以退出两个循环。)

但是,您没有展示如何绘制网格。如果您的网格从一个位置 (xp,yp) 开始并且每个单元格都有一个 heighth和 width w,您可以轻松地将鼠标坐标直接转换为单元格坐标:

cellx = (mousex - xp)/w
celly = (mousey - yp)/h

...其中 cellx,celly < 0 或 >= size 表示在网格外单击。

于 2013-07-21T22:45:38.507 回答
0

在不了解屏幕上的内容的情况下,我们可以应用以下内容。只要从画布边缘到渲染单元格的位置没有偏移,就可以使用跟随,如果有偏移,则需要将其添加到 x,y 坐标。

int x = 201;  //You would use e.getX();
int y = 10;   //You would use e.getY();

int xWidth = 50;
int yWidth = 50;

//Divide by the width to get the array position
int xIndex = (int)Math.floor(x / xWidth);
int yIndex = (int)Math.floor(y / yWidth);
于 2013-07-21T22:49:40.317 回答