Доступ к локально определенным JButton в GridLayout JPanel

Допустим, у вас есть GridLayout JButtons в сетке NxN в коде, таком как этот:

<code>JPanel bPanel = new JPanel();
bPanel.setLayout(new GridLayout(N, N, 10, 10));
    for (int row = 0; row < N; row++)
    {
        for (int col = 0; col < N; col++)
        {
            JButton b = new JButton("(" + row + ", " + col + ")");
            b.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {

                }
            });
            bPanel.add(b);
        }
    }
</code>

Как можно получить доступ к каждой кнопке по отдельности в сетке, чтобы изменить имя кнопки с помощью setText ()? Это должно быть сделано вне фактического нажатия на соответствующую кнопку.

Поскольку каждая кнопка создается локально как «b», глобально доступное имя для каждой кнопки в настоящее время невозможно. Что можно сделать, чтобы получить доступ к каждой кнопке независимо? Может ли массив типа JButton [] [] содержать ссылки на все кнопки? Как это можно настроить в приведенном выше коде?

Любой вклад приветствуется.

Благодарю.

 trashgod30 апр. 2012 г., 17:23
Смотрите также этоQ&A.
 Ondrej Peterka30 апр. 2012 г., 15:43
Вероятно, дубликатstackoverflow.com/questions/8394296/…

Ответы на вопрос(2)

Решение Вопроса

вы можете,

1) putClientProperty

buttons[i][j].putClientProperty("column", i);
buttons[i][j].putClientProperty("row", j);
buttons[i][j].addActionListener(new MyActionListener());

а также

public class MyActionListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        JButton btn = (JButton) e.getSource();
        System.out.println("clicked column " + btn.getClientProperty("column")
                + ", row " + btn.getClientProperty("row"));
}

2) ActionCommand

 Avertheus30 апр. 2012 г., 16:38
О, это здорово! Все внутреннее положить клиенту свойства. Я мог бы попробовать это, а не массив ссылок JButton. Спасибо!
 20 окт. 2012 г., 21:55
Хм, положи клиенту свойства. Я узнаю что-то новое от вас с каждым постом!
 30 апр. 2012 г., 16:53
Вам не нужен экземпляр MyActionListener для каждой кнопки. Один экземпляр будет работать для всех кнопок. В противном случае отличный ответ.
 30 апр. 2012 г., 17:15
рад помочь вам

Вы можете создать массив (или список или что-то еще) для хранения всех кнопок. Или вы можете использоватьpublic Component[] getComponents() Метод bPanel (Контейнер).

Ваш ответ на вопрос