Как по нажатию на JButton JAVA задать действие "нескольким и т.д." кнопкам
Изучаю Java, всю инфу беру с интернета, где-то могу ошибаться поэтому прошу помощи. Практикуюсь постоянно, пишу сейчас вот второе приложение(назовём его так) аналогия минёр. Так вот мне нужна логика чтобы по нажатию на кнопку(поле у меня состоит из кнопок и весь визуал тоже вставлен в кнопки, может это не умно но и я в джаве пока не умный) исчезали парочку ближайших. Jbutton созданы в цикле через двумерную матрицу им заданы getName. По факту я могу вытянуть всё от нужных мне кнопок, но как их задействовать ума не приложу, имеются их координаты, getName и т.д. но в моем случае в mouseLitener я не знаю как это реализовать. файл с проекта тык
я не знаю какую часть кода сюда вставить, поэтому прошу зайти на гит я все отделы подписал, знающему будем весьма понятно. вот раздел создания кнопок
int yLength = 0;
for (int i = 0; i <= table.length - 1; i++) {
for (int j = 0; j <= table[i].length - 1; j++) {
if (table[i][j] == bom) {
jButtonMine = new JButton();
jButtonMine.setIcon(button.getIcon());
jButtonMine.setName("mine" + indexMine++);
jButtonMine.setBounds(j * SCALE, yLength * SCALE, SCALE, SCALE);
action = new Action(jButtonMine);
jButtonMine.addActionListener(action);
jButtonMine.addMouseListener(action);
add(jButtonMine);
} else {
jButtonTable = new JButton();
jButtonTable.setIcon(button.getIcon());
jButtonTable.setName("table" + indexTable++);
jButtonTable.setBounds(j * SCALE, yLength * SCALE, SCALE, SCALE);
action = new Action(jButtonTable);
jButtonTable.addActionListener(action);
jButtonTable.addMouseListener(action);
add(jButtonTable);
}
}
yLength++;
}
В этом классе логика слушателя
class Action implements ActionListener, MouseListener {
public Action(JButton button) {
tap = button;
}
@Override
public void actionPerformed(ActionEvent e) {
JButton b = (JButton) e.getSource();
System.out.println(e.getSource());
for (int i = 1; i < indexTable; i++) {
if (b.getName().equals("table" + i) && tap == b) {
b.setIcon(button.getIcon());
} else if (b.getName().equals("mine" + i) && tap == b) {
b.setIcon(jButtonMine.getIcon());
}
}
repaint();
}
private final JButton tap;
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
JButton b = (JButton) e.getSource();
if (e.getButton() == MouseEvent.BUTTON3) {
for (int i = 1; i < indexTable; i++) {
if (b.getName().equals("table" + i) && tap == b) {
b.setIcon(new ImageIcon("src/main/resources/iconFlag.png"));
} else if (b.getName().equals("mine" + i) && tap == b) {
b.setIcon(new ImageIcon("src/main/resources/iconFlag.png"));
}
}
} else if (e.getButton() == MouseEvent.BUTTON1) {
for (int i = 1; i < indexTable; i++) {
if (b.getName().equals("mine" + i) && tap == b && b.getIcon() == button.getIcon()) {
JOptionPane.showMessageDialog(jFrame, "ОПА! ну шо ты дорогой, на в ебало!");
System.exit(0);
} else if
(b.getName().equals("table" + i) && tap == b && b.getIcon() == button.getIcon()) {
b.setVisible(false);
}
}
}
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}
не знаю что ещё, выше прикрепил ссылку на GitHub
Ответы (2 шт):
Вот как пример прослушиватель действий который слушает несколько кнопок
public class Calc extends JFrame implements ActionListener {
private Button button1;
public Calc()
{
super();
this.setSize(100, 100);
this.setVisible(true);
this.button1 = new JButton("1");
this.button1.addActionListener(this);
this.add(button1);
}
public static void main(String[] args) {
Calc calc = new Calc();
calc.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == button1)
}
}
Upd. Реализовал логику путем создания матрицы jbutton , что позволяет фактически достучаться быстро до любой кнопки, и задать ей реализацию, в моем случае , функционал минера, при нажатии на пустое поле открывается несколько ближайших где нет мин.
Кому интересно, скину код сюда позже.