import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class SwingApplication{
public static void main(String args[]){
JFrame f = new  JFrame("Java10-[C.R.S.M]K01");
JButton b = new  JButton("Swing Button");
JLabel l = new  JLabel("You have click: "+"0 "+"次");
JPanel p = new JPanel();
b.addActionListener(new ButtonHandler());
p.setBorder(BorderFactory.createEmptyBorder(30,30,10,30));
p.setLayout(new GirdLayout(0,1));
f.add(p);
p.add(b);
p.add(l);
f.setSize(80,80);
f.setVisible(true);
}
class ButtonHandler implements ActionListener{  //加上 public 也不对。 
public void actionPerformed(ActionEvent e){
numClicks++;
l.setText("You have click: "+numClicks+"次");//输出l后面那个点时没有弹出对应的方法。
}
  }
}
出错信息:
--------------------配置: <默认>--------------------
E:\JavaTempFiles\SwingApplication.java:10: 无法从静态上下文中引用非静态 变量 this
        b.addActionListener(new ButtonHandler());
                            ^
E:\JavaTempFiles\SwingApplication.java:12: 找不到符号
符号: 类 GirdLayout
位置: 类 SwingApplication
        p.setLayout(new GirdLayout(0,1));
                        ^
E:\JavaTempFiles\SwingApplication.java:21: 找不到符号
符号: 变量 numClicks
位置: 类 SwingApplication.ButtonHandler
                numClicks++;
                ^
E:\JavaTempFiles\SwingApplication.java:22: 找不到符号
符号: 变量 numClicks
位置: 类 SwingApplication.ButtonHandler
                l.setText("You have click: "+numClicks+"次");
                                             ^
E:\JavaTempFiles\SwingApplication.java:22: 找不到符号
符号: 变量 l
位置: 类 SwingApplication.ButtonHandler
                l.setText("You have click: "+numClicks+"次");
                ^
5 错误处理已完成。

解决方案 »

  1.   

    如错误提示
    1 GirdLayout 这个类在哪里?你没有import 他, 当然。我也不知道你用的什么组件2 numClicks 这个属性的声明在哪里?我也没看到。 没有声明,不能使用!
     
      

  2.   

    呵呵  网格布局的单词写错了,应该是GridLayout  这样写是没错的 p.setLayout(new GridLayout(0,1));
    numClicks 这个变量忘记声明了,见笑了。
    改了这两个地方后,还有2个错误,或许更多。有的错误没报出来,并不代表不存在。改后错误信息:--------------------配置: <默认>--------------------
    E:\JavaTempFiles\SwingApplication.java:10: 无法从静态上下文中引用非静态 变量 this
            b.addActionListener(new ButtonHandler());
                                ^
    E:\JavaTempFiles\SwingApplication.java:24: 找不到符号
    符号: 变量 l
    位置: 类 SwingApplication.ButtonHandler
                    l.setText("You have click: "+numClicks+"次"); //输出l后面那个点时没有弹出对应的方法。                ^
    2 错误处理已完成。
      

  3.   

    其实不建议你在有main函数的类里里直接加内部类...
    你有几处错误需要改下,我把代码给你改了,你自己对照下import java.awt.*;import javax.swing.*;
    import java.awt.event.*;public class SwingApplication {

    private static int numClicks=0;
    private static JLabel l;
    public static void main(String args[]) {
    JFrame f = new JFrame("Java10-[C.R.S.M]K01");
    JButton b = new JButton("Swing Button");
    l = new JLabel("You have click: " + "0 " + "次");
    JPanel p = new JPanel();
    b.addActionListener(new ButtonHandler());
    p.setBorder(BorderFactory.createEmptyBorder(30, 30, 10, 30));
    p.setLayout(new GridLayout(0, 1));
    f.add(p);
    p.add(b);
    p.add(l);
    f.setSize(80, 80);
    f.setVisible(true);
    } static class ButtonHandler implements ActionListener { // 加上 public 也不对。
    public void actionPerformed(ActionEvent e) { numClicks++;
    l.setText("You have click: " + numClicks + "次");// 输出l后面那个点时没有弹出对应的方法。
    }
    }
    }
      

  4.   

    这个修改的很好 你以前的JLabel是局部变量不能在外部调用的...
      

  5.   

    呵呵  我知道了,ButtonHandler是个内部类,调用局部变量时要声明为 final 但是还报错,这句话有问题吗?我知道局部变量的作用域就是改变量所在的方法体。但 内部类调用局部变量时要声明为 final书上也是这样声明的,孙鑫的awt教程上也是这样说的呀!
    import java.awt.*;import javax.swing.*;
    import java.awt.event.*;public class SwingApplication {
        
        private static int numClicks=0;
        //private static JLabel l;
        public static void main(String args[]) {
            JFrame f = new JFrame("Java10-[C.R.S.M]K01");
            JButton b = new JButton("Swing Button");
            final JLabel l = new JLabel("You have click: " + "0 " + "次");
            JPanel p = new JPanel();
            b.addActionListener(new ButtonHandler());
            p.setBorder(BorderFactory.createEmptyBorder(30, 30, 10, 30));
            p.setLayout(new GridLayout(0, 1));
            f.add(p);
            p.add(b);
            p.add(l);
            f.setSize(80, 80);
            f.setVisible(true);
        }    static class ButtonHandler implements ActionListener { 
            public void actionPerformed(ActionEvent e) {
                numClicks++;
                l.setText("You have click: " + numClicks + "次");// 输出l后面那个点时没有弹出对应的方法。
            }
        }
    }
    E:\JavaTempFiles\SwingApplication.java:29: 找不到符号
    符号: 变量 l
    位置: 类 SwingApplication.ButtonHandler
                l.setText("You have click: " + numClicks + "次");// 输出l后面那个点时没有弹出对应的方法。
                ^
    1 错误处理已完成。