我创建了一个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>
答案 0 :(得分:1)
如完整example所示,您可以计算JButton
中List<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
}
);
我猜这些动作者将始终保持可用状态。