2013-07-21 4 views
0

Im строя доска используя GUI (может быть настольная игра). Я создал 2D-массив для создания таких ячеек, как игра Gomoku. Я хочу сделать эту функцию: всякий раз, когда я нажимаю на ячейку, будет отображаться позиция ячейки.Как получить позицию элемента в 2D-массиве при щелчке мышью?

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

Можете ли вы показать несколько из тех условий 'if', которые вы пробовали? –

+2

Также рассмотрим ['GridButtonPanel'] (http://stackoverflow.com/a/7706684/230513), возможно, используя' JToggleButton'. – trashgod

ответ

0

Там должен быть вызов хитом тест функции в вашем if заявлении. Функция тестового теста должна перевести из координат мыши в координаты ячейки для текущей (i, j) позиции и вернуть простой true или false. (И как только вы получите true, вы можете выйти из обеих петель.)

Вы не показываете, как вы рисуете сетку. Если сетка начинается в позиции (Xp, Yp) и каждая клетка имеет высоту и ширину hw, вы можете легко конвертировать координаты мыши непосредственно в ячейку координаты:

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

... где в cellx, Celly < 0 или> = размер указывает на щелчок вне сетки.

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); 
+0

только что обновил мой вопрос, чтобы показать u мой макет. –

1

Вы можете добавить свои MouseListener непосредственно в клетки и использовать e.getSource(), чтобы получить щелкнул ячейку.

Смежные вопросы