2011-02-09 2 views
1

В нашем коде имеется массив кнопок 10 на 10. Мы сделали массив 10 на 10, используя цикл вложенных циклов, и у нас нет проблем с созданием кнопок. Кроме того, у нас есть это так, что при нажатии кнопки a появляется кнопка «Clicked Click». Но как мы можем идентифицировать , на который была нажата кнопка?Определите, какая кнопка была нажата в 2D-массиве. Java

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

ответ

2

Вы можете позвонить по методу getSource().

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

0

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

Кнопки класс реализует свой слушатель.

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

1

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

+0

Мы не используем JButtons, извините за то, что не уточнили это. – Johannes

2

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

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

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

int row = buttonIndex/10; 
int col = buttonIndex % 10; 
0

Вы можете использовать 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

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

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