下面贴出两段代码 前面的没问题 后面的不行 
希望能得到知道 
本人是刚学  谢谢
package jre;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TextDemo extends JFrame {
  JPanel panel;
  JButton button;
  JTextField label;
  public TextDemo(){
  super("测试事件响应");
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  JPanel panel = new JPanel();
  getContentPane().add(panel);
  JButton button = new JButton("点击鼠标");
  final JTextField label = new JTextField("注意观察");
  button.addActionListener(new ActionListener(){
  public void actionPerformed(ActionEvent e){
  label.setText("鼠标被点击");
  }
  });
  panel.add(button);
  panel.add(label);
  setSize(300,200);
  setVisible(true);
  }
  public static void main(String[] args){
  new TextDemo();
  }
}  这段代码中button响应了import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TextDemo extends JFrame implements ActionListener{
  JPanel panel;
  JButton button;
  JTextField label;
  public TextDemo(){
  super("测试事件响应");
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  JPanel panel = new JPanel();
  getContentPane().add(panel);
  JButton button = new JButton("点击鼠标");
  JTextField label = new JTextField("注意观察");
  button.addActionListener(this);
  panel.add(button);
  panel.add(label);
  setSize(300,200);
  setVisible(true);
  }
  public void actionPerformed(ActionEvent e){
  if(e.getSource() == button)
  label.setText("鼠标被点击");
  }
  public static void main(String[] args){
  new TextDemo();
  }
}  这段代码就不行了再换个方法import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TextDemo extends JFrame {
  JPanel panel;
  JButton button;
  JTextField label;
  public TextDemo(){
  super("测试事件响应");
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  JPanel panel = new JPanel();
  getContentPane().add(panel);
  JButton button = new JButton("点击鼠标");
  JTextField label = new JTextField("注意观察");
  button.addActionListener(new ButtonAction());
  panel.add(button);
  panel.add(label);
  setSize(300,200);
  setVisible(true);
  }
  class ButtonAction implements ActionListener{
  ButtonAction(){
  
  }
  public void actionPerformed(ActionEvent e){
  if(e.getSource() == button)
  label.setText("鼠标被点击");
  }
  }
  public static void main(String[] args){
  new TextDemo();
  }
}  还是不行 ~~
能详细解释下吗 ?
多谢!!!

解决方案 »

  1.   

    button.addActionListener(new ButtonAction());
    panel.add(button);
    panel.add(label);
    setSize(300,200);
    setVisible(true);
      }
      class ButtonAction implements ActionListener{
    ButtonAction(){
     
    }
    public void actionPerformed(ActionEvent e){
    if(e.getSource() == button)
    label.setText("鼠标被点击");
    }
      }你在button.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    if(e.getSource() == button)
    label.setText("鼠标被点击");
    }
    })直接用内部类 不要自己写一个类, 你new ButtonAction() 这个构造里什么操作都没有自然是没有反应
      

  2.   


    if (e.getSource() == button)这个判断出问题了吧。另:label貌似没有初始化。
      

  3.   

    按照你第二种写法,改的。import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class TextDemo extends JFrame implements ActionListener {
    JPanel panel; JButton button; JTextField label = new JTextField("注意观察"); public TextDemo() {
    super("测试事件响应");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel = new JPanel();
    getContentPane().add(panel);
    JButton button = new JButton("点击鼠标");
    button.addActionListener(this);
    panel.add(button);
    panel.add(label);
    setSize(300, 200);
    setVisible(true);
    } public void actionPerformed(ActionEvent e) {
    label.setText("鼠标被点击");
    } public static void main(String[] args) {
    new TextDemo();
    }
    }
      

  4.   

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;public class TextDemo extends JFrame implements ActionListener {
    JPanel panel;
    JButton button;
    JTextField label; public TextDemo() {
    super("测试事件响应");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel = new JPanel();
    getContentPane().add(panel);
    button = new JButton("点击鼠标");
    label = new JTextField("注意观察");
    button.addActionListener(this);
    panel.add(button);
    panel.add(label);
    setSize(300, 200);
    setVisible(true);
    } public void actionPerformed(ActionEvent e) {
    if (e.getSource() == button)
    label.setText("鼠标被点击");
    } public static void main(String[] args) {
    new TextDemo();
    }
    }注意你的构造方法中的变量定义,如果写成这样:
    JButton button = new JButton("点击鼠标");
    则定义了一个局部变量。
    如果写成这样:
    button = new JButton("点击鼠标");
    则是在为全局变量赋值。