我使用GUI构建电路板(可能是棋盘游戏)。我已经创建了2D数组来制作像Gomoku游戏一样的细胞。我想做这个功能:每当我点击一个单元格时,都会显示单元格位置。
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
答案 0 :(得分:1)
您可以将MouseListener
直接添加到单元格中,然后使用e.getSource()
获取点击的单元格。
答案 1 :(得分:0)
您的if
声明中应该有一个命中测试函数调用。命中测试函数应从鼠标坐标转换为当前(i,j)位置的Cell坐标,并返回简单的true
或false
。 (只要你得到true
,就可以退出两个循环。)
但是,您没有展示如何绘制网格。如果您的网格从位置(xp,yp)开始,并且每个单元格的高度为h
,宽度为w
,则可以轻松地将鼠标坐标直接转换为单元格坐标:
cellx = (mousex - xp)/w
celly = (mousey - yp)/h
...其中一个cellx,celly&lt; 0或&gt; = size表示网格外的点击。
答案 2 :(得分: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);