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
急救 (具体我就是想实现创建一个按钮组 并且每个按钮有单独的监听 而监听结果是相同的)
{
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
急救 (具体我就是想实现创建一个按钮组 并且每个按钮有单独的监听 而监听结果是相同的)
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)
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);
}
}
});帮你改好了