在不使用嵌套循环的情况下在JButton [] []数组中查找ActionEvent的源代码?

时间:2014-03-10 19:12:11

标签: java arrays swing loops jbutton

我创建了一个JFrame应用程序,其中包含8x8 JButtons[][]数组,对应于所选的&数组。取消选择ImageIcon s。按下按钮时,它会使用setSelection()选择该按钮并取消选择任何其他按钮。但是,如果按下与所选按钮相邻的任何按钮,则所选按钮和相邻按钮将交换ImageIcons

我已经成功地完成了大部分工作,但是使用ActionEvent中的嵌套循环来确定相邻按钮,所选按钮和取消选择的按钮同时成为一个逻辑噩梦。

public void actionPerformed(ActionEvent event)
{
for (int row = 0; row < 8; row++) {
  for (int col = 0; col < 8; col++) {
    if (event.getSource() == buttons[row][col]) {
      if (row<7) buttonsAdjacent[row+1][col] = true;
      if (row>0) buttonsAdjacent[row-1][col] = true;
      if (col<7) buttonsAdjacent[row][col+1] = true;
      if (col>0) buttonsAdjacent[row][col-1] = true;
      buttons[row][col].setSelected(true);
      }
    }
  }
}

如何将actionListeners放入数组索引[row][col]的每个相邻按钮,以确定是否实际按下了相邻的按钮?每次选择新按钮时,如何重新分配actionListeners个?{/ p>

2 个答案:

答案 0 :(得分:1)

如完整example所示,您可以计算JButtonList<JButton>的索引,作为给定网格大小的行和列的函数,例如N * N。有关替代方案,请参阅评论和edit history

private static final int N = 5;

private JButton getGridButton(int r, int c) {
    int index = r * N + c;
    return list.get(index);
}

答案 1 :(得分:0)

你能不能只为2D数组中的每个JButton添加一个actionlistener?

buttons[row][col].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//Your code that should execute on a click on the Object here
}
);

我猜这些动作者将始终保持可用状态。