private ImagePanel[]  panel = new ImagePanel[20];
private int i=0;
for(;i<panel.length;i++){
panel[i].addMouseListener(new MouseListener() {
public void mouseReleased(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
JOptionPane.showMessageDialog(PkView.this, i+"号位置", "单体信息", JOptionPane.DEFAULT_OPTION);
}
});
}
这样输出的位置始终是最后一个,我只能把20个数组元素都单独绑定了吗?跪求解决!javaswing循环数组监听

解决方案 »

  1.   

    当你添加完所有的listener之后,i等于panel.length-1;
    当然任何panel在触发MouseListener时,其中JOptionPane.showMessageDialog(PkView.this, i+"号位置", "单体信息", JOptionPane.DEFAULT_OPTION);中的i还是获取的private int i。
    所以产生了每次都是最后一个现象。解决办法应该将panel编号单独保存起来。
      

  2.   

    可以在new MouseListener() {
    int id = i;
     public void mouseReleased(MouseEvent e) {
     }
    public void mouseClicked(MouseEvent e) {
     JOptionPane.showMessageDialog(PkView.this, id+"号位置", "单体信息", JOptionPane.DEFAULT_OPTION);
     }
     });