Увеличение имени объекта в цикле - PullRequest
2 голосов
/ 25 января 2011

Я использую цикл for для создания сетки из 60 кнопок.То, что я хочу сделать, это иметь имя приращения actionListener каждый раз, когда запускаются циклы:

for (int y = 0; y < game.getHeight(); y++) {
        for (int x = 0; x < game.getWidth(); x++) {
            JButton square = new JButton();
            square.setFont(new Font("Verdana", Font.PLAIN, 20));
            ActionListener bh = new button_handler();
            square.addActionListener(bh);
            grid.add(square);
        }

Поэтому я бы хотел, чтобы имя увеличивалось (bh_1, bh_2, bh_3 и т. Д.).

Спасибо!

Ответы [ 3 ]

3 голосов
/ 25 января 2011

Если ваша цель состоит в том, чтобы иметь возможность отслеживать ActionListeners по имени после создания, тогда вы захотите использовать массив для этого.(Если это не то, почему вы хотите назвать их по-другому, мне потребуется дополнительная информация.)

Предположим, у вас есть ActionListener[60] с именем actionListeners и счетчик с именем buttonCount.

JButton square = new JButton();
square.setFont(new Font("Verdana", Font.PLAIN, 20));
ActionListener bh = new button_handler();
actionListeners[buttonCount++] = bh; // store the handler in an array for later
square.addActionListener(bh);
grid.add(square);

Теперь вы сможете получить доступ к ActionListeners из массива.

0 голосов
/ 25 января 2011

Сохраните их в двумерном массиве.

Вы можете хранить их в любом массиве, но я думаю, что хранить их в двумерном массиве имеет смысл, поскольку у вас есть сетка кнопок и сетка обработчиков. Я также думаю, что это хорошая идея, чтобы сохранить ссылку на кнопки и обработчики. Это позволит вам настроить кнопки и обработчики кнопок в любое время.

Вот пример того, как это сделать:

JButton[][] squares = new JButton[game.getWidth()][game.getHeight()];
ActionListener[][] bhs = new ActionListener[game.getWidth()][game.getHeight()];
for (int y = 0; y < game.getHeight(); y++) {
  for (int x = 0; x > game.getWidth(); x++) {
    squares[x][y] = new JButton();
    squares[x][y].setFont(new Font("Verdana", Font.PLAIN, 20));
    ActionListener bhs[x][y] = new button_handler();
    squares[x][y].addActionListener(bhs[x][y]);
    grid.add(squares[x][y]);

  }
}
0 голосов
/ 25 января 2011

Я бы порекомендовал использовать список:

LinkedList<ActionListener> actionListeners = new LinkedList<ActionListener>();

for (int y = 0; y < game.getHeight(); y++) {
    for (int x = 0; x < game.getWidth(); x++) {
        JButton square = new JButton();
        square.setFont(new Font("Verdana", Font.PLAIN, 20));
        ActionListener bh = new button_handler();

        // can access this action listener via actionListeners.get(indexNumber).
        actionListeners.add(bh);

        square.addActionListener(bh);
        grid.add(square);
    }
...