JButton[][] button=new JButton[11][11];public void init()
{
int i = 0,j=0;
setLayout(new GridLayout(10,10));
for(;i<10;i++)
{
j=0;
for(;j<10;j++)
{
button[i][j]=new JButton(unknownIcon);
add(button[i][j]);
button[i][j].addMouseListener(new MouseAdapter()                {
public void mouseClicked(MouseEvent e)
{
***button[i][j].setIcon(openIcon);
                                     
                            }
}); ***标注那一行提示:不能引用另一方法中定义的内部类中非终态变量 i
而将ij放到init外后***button[i][j].setIcon(openIcon);调用ij时ij的值永远是0
急救   (具体我就是想实现创建一个按钮组 并且每个按钮有单独的监听 而监听结果是相同的)

解决方案 »

  1.   

    这种情况就不要用内部匿名类来实现了直接写一个方法添加时间监听就可以了而将ij放到init外后***button[i][j].setIcon(openIcon);调用ij时ij的值永远是上句 什么意思 看看你的代码
      

  2.   

    import java.awt.*;
    import java.awt.event.*;
    import java.applet.*;
    import javax.swing.*;
    import java.util.*;public class test extends Applet
    {
    ImageIcon unknownIcon = new ImageIcon("unknown.gif");
    ImageIcon defaultIcon = new ImageIcon("default.gif");
    ImageIcon startIcon = new ImageIcon("start.gif");
    ImageIcon openIcon = new ImageIcon("open.gif");
    ImageIcon flagIcon = new ImageIcon("flag.gif");

    JButton[][] button=new JButton[10][10];
    int i = 0,j=0;
    public void init()
    {


    setLayout(new GridLayout(10,10));
    for(;i<10;i++)
    {
    j=0;
    for(;j<10;j++)
    {
    button[i][j]=new JButton(unknownIcon);
    add(button[i][j]);

    button[i][j].addMouseListener(new MouseAdapter(){
       public void mouseClicked(MouseEvent e)
       {
       if(e.getButton()==MouseEvent.BUTTON1)
       {
           button[i][j].setIcon(openIcon);
       
       }
       if(e.getButton()==MouseEvent.BUTTON3)
       {
           button[i][j].setIcon(flagIcon);
          }
       }
    });

    }
    }
    }
    }提示:
    Exception in thread "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBoundsException:10
    at saolei$1.mouseClicked(saolei.java:40)
    at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:212)
    at java.awt.Component.processMouseEvent(Component.java:5491)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
    at java.awt.Component.processEvent(Component.java:5253)
    at java.awt.Container.processEvent(Container.java:1966)
    at java.awt.Component.dispatchEventImpl(Component.java:3955)
    at java.awt.Container.dispatchEventImpl(Container.java:2024)
    at java.awt.Component.dispatchEvent(Component.java:3803)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3901)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
    at java.awt.Container.dispatchEventImpl(Container.java:2010)
    at java.awt.Component.dispatchEvent(Component.java:3803)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
      

  3.   

    button[i][j].addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent e) {
    if (e.getButton() == MouseEvent.BUTTON1) {

     ((JButton)e.getSource()).setIcon(openIcon); }
    if (e.getButton() == MouseEvent.BUTTON3) {
    ((JButton)e.getSource()).setIcon(flagIcon);
    }
    }
    });帮你改好了
      

  4.   

    i j 最后都变成了10而你的事件处理的时候 每次都是 对 button[10][10] 进行操作当然有问题
      

  5.   

    成功了  原来搞得头都大了  thx~~~~~