在循环中增加对象名称

时间:2011-01-25 15:39:52

标签: java loops increment

我正在使用for循环来创建一个包含60个JButton的网格。我想要做的是每次循环运行时都有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 个答案:

答案 0 :(得分:3)

如果您的目标是在创建后能够按名称跟踪ActionListeners,那么您将需要使用数组来执行此操作。 (如果这不是您想要以不同方式命名的原因,那么我将需要更多信息。)

假设您有一个名为ActionListener[60]的{​​{1}}和一个名为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);

答案 1 :(得分:0)

我建议使用一个列表:

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);
    }

答案 2 :(得分:0)

将它们存储在二维数组中。

你可以将它们存储在任何数组中,但我认为将它们存储在二维数组中是有意义的,因为你有一个按钮网格和一个处理程序网格。我还认为保留对按钮和处理程序的引用是个好主意。这样您就可以在以后调整按钮和按钮处理程序。

以下是如何执行此操作的示例:

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]);

  }
}