Определить, какая кнопка была нажата в 2D массиве Java - PullRequest
1 голос
/ 09 февраля 2011

В нашем коде у нас есть массив кнопок 10 на 10.Мы создали массив 10 на 10, используя вложенный цикл for, и у нас нет проблем с созданием кнопок.Кроме того, у нас это так, что при нажатии кнопки а отображается «Нажатие кнопки».Но как мы можем определить , какая кнопка была нажата?

Мы используем методы actionListeners и actionPerformed.

Ответы [ 6 ]

2 голосов
/ 09 февраля 2011

Поместите все кнопки в список (это легко сделать во внутреннем цикле), сделайте список доступным для ActionListener (например, как свойство внешнего класса; я не знаю, как ваша многочисленная команда организовала слушателей, поэтомуЯ не могу предоставить какие-либо подробности).Затем позвоните:

  int buttonIndex = listWithButtons.indexOf(event.getSource())

Если один из вас хочет узнать точные координаты кнопки, их можно рассчитать по формулам:

int row = buttonIndex / 10;
int col = buttonIndex % 10;
2 голосов
/ 09 февраля 2011

Вы можете вызвать метод getSource() для события.

Или вы можете использовать Action классы в своих кнопках и создавать новый экземпляр каждого при создании кнопок.

1 голос
/ 09 февраля 2011

Я предполагаю, что это JButton. Вы можете использовать setActionCommand ("команда" + строка + "-" + столбец). Затем в слушателе просто скажите getActionCommand (), чтобы увидеть, какая кнопка была нажата.

0 голосов
/ 09 февраля 2011

В итоге мы использовали вложенный цикл for внутри actionPerformed, который прошел через 2d массив и вызвал оттуда методы действия.Возможно, это не лучшее решение, и, вероятно, лучше использовать другую технику, но, похоже, оно работает просто отлично.

Хотя здесь есть несколько действительно хороших идей, спасибо, ребята!

0 голосов
/ 09 февраля 2011

Вы можете использовать getActionCommand так:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestButtons extends JPanel {

    private static final long serialVersionUID = 1L;

public TestButtons() {

    JButton btn1 = new JButton("Btn1");
    btn1.addActionListener(new ButtonListener());
    add(btn1);
    JButton btn2 = new JButton("Btn2");
    btn2.addActionListener(new ButtonListener());
    add(btn2);

  }

  public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.getContentPane().add(new TestButtons());

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(200, 200);
    frame.setVisible(true);
  }
}

class ButtonListener implements ActionListener {
  ButtonListener() {
  }

  public void actionPerformed(ActionEvent e) {
      System.out.println(e.getActionCommand()+ " has been clicked");
  }
}
0 голосов
/ 09 февраля 2011

Два простых решения, но, вероятно, не самые лучшие:

Класс кнопки, реализующий свой собственный слушатель.

Вы также можете просто проверить каждую кнопку, чтобы увидеть, равна ли она action.getSource() объект.Или просто приведите (ButtonClass) к getSource (), чтобы можно было использовать найденную кнопку.

...