Непроверенный и не скомпилированный код для поиска x и y , который вы ищете, находится ниже.
Обратите внимание, что метод getX()
класса MouseEvent
получает местоположение мышиуказатель на экране компьютера, а не x из вашего массива.Аналогично для метода getY()
.Вот почему вы ничего не получаете.
В приведенном ниже коде я добавляю один и тот же MouseListener
ко всем JLabel
s.
* MouseEvent
содержит JLabel
, которым была мышьщелкнул, и метод getSource()
класса MouseEvent
возвращает его.Затем вам нужно перебрать свой массив JLabel
s и посмотреть, какой из них соответствует источнику MouseEvent
.
int rows = // number of rows in 2D array
int cols = // number of cols in 2D array
final JLabel[][] labels = new JLabel[rows][cols]
MouseListener ml = new MouseAdapter() {
public void mousePressed(MouseEvent me) {
Object src = me.getSource();
int x = -1;
int y = -1;
for (int i = 0; i < labels.length(); i++) {
for (int j = 0; j < labels[i].length; j++) {
if (src == labels[i][j]) {
x = i;
y = j;
break;
}
}
if (x >= 0) {
break;
}
}
if (x > 0) {
System.out.printf("JLabel[%d][%d] was clicked.%n", x, y);
}
else {
System.out.println("Could not find clicked label.");
}
}
}
for (int row = 0; row < rows; row++) {
for (int col = 0; col < cols; col++) {
labels[row][col] = new JLabel(row + "," + col);
labels[row][col].addMouseListener(ml);
}
}