我正在使用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等)。
谢谢!
答案 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]); } }