У меня есть двухмерный массив компонентов JLabel
, и я хочу получить место, где мышь щелкнула на метке, как это.
Jlabel [x] [y] // I want this x & y
Как мне это сделать?
Я пробовал это, но ничего не получаю!
new MouseAdapter(){
public void mousePressed(MouseEvent e){
int a=e.getX();
int b=e.getY();
MainBoard.ML.label=MainBoard.disk1[a][b];
Color c=MainBoard.ML.label.getForeground();
if (color==1)
MainBoard.ML.label.setForeground(Color.black);
else
MainBoard.ML.label.setForeground(Color.white);
new Play(a,b,color);
new Player2(r);
MainBoard.disk1[a][b].addMouseListener(new ML1(a,b));
}
};
Я хочу получить индекс x и y массива меток.
Я хочу получить место, где щелкнула мышь, и передать его ML для выполнения действия, если у вас есть идеи для этого, я буду признателен за это.
Если прослушиватель мыши добавлен к самим меткам, e.getSource()
получит метку, по которой щелкнули. Это единственная помощь, которую я могу (хочу попытаться) предоставить на основе текущей информации. Чтобы получить дополнительные или лучшие советы: 1) Чтобы быстрее получить помощь, редактировать добавить минимальный воспроизводимый пример или Короткий, автономный, правильный пример. 2) Используйте логическую и последовательную форму отступов строк и блоков кода. Отступы предназначены для облегчения понимания потока кода! В большинстве IDE есть сочетание клавиш специально для форматирования кода.
Как мне использовать e.getSource() для этого?
Совет «Как мне использовать..»: добавьте @f1sh (или кого угодно, важно @
) к уведомлять человеку нового комментария. Кроме того, f1sh сделал хорошее замечание, на которое вы должны обратить внимание: обнаружение события не место для прослушивания добавление.
Непроверенный и нескомпилированный код для поиска нужных вам Икс и у приведен ниже.
Обратите внимание, что метод getX()
класса MouseEvent
получает местоположение указателя мыши на экране компьютера, а не Икс из вашего массива. Аналогично для метода getY()
. Вот почему вы ничего не получаете.
В приведенном ниже коде я добавляю один и тот же MouseListener
ко всем JLabel
.
MouseEvent
содержит JLabel
, по которому была нажата мышь, и метод getSource()
класса MouseEvent
возвращает его. Затем вам нужно перебрать массив JLabel
и посмотреть, какой из них соответствует источнику 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);
}
}
спасибо за сотрудничество, я просто компилирую и тестирую ваш код, но больше ничего не получил. Не возражаете, если я пришлю вам свой код, чтобы посмотреть, что с ним не так.
@edie.lp код, который я разместил, не является полной программой, он предназначен только для того, чтобы помочь вам начать работу.
Спасибо за помощь
Вы назначаете MouseListener внутри события mousePressed? Это действительно то, чего вы хотите? Вы должны назначить MouseListener для каждой JLabel при их создании.