class MyMouseListener extends MouseAdapter{
  private int step;  //决定Button上的标号每次增加的步长
  public MyMouseListener(int step){this.step=step;}
  public void mousePressed(MouseEvent evt){
     EventObject e = (EventObject)evt;   //显示无法Cast的错误,但是MouseEvent明明就是EventObject的子类?
     Button button=(Button)evt.getSource();  //显示evt没有getSource这个方法,该方法不是从EventObject继承的嘛?
     int count=Integer.parseInt(button.getLabel());
     button.setLabel(new Integer(step+count).toString());  //把Button上的标号加step
  }
}上面这些问题让我很是头痛啊

解决方案 »

  1.   

    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;class Test32 extends JFrame implements MouseListener {

    JButton bt = new JButton("Step");
    int step=1;
    public Test32() {
    super();
    this.setSize(100, 100);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setVisible(true);

    bt.setText("Step"+step);
    bt.addMouseListener(this);
    this.add(bt);
    }

    public static void main(String[] args) {
    new Test32();
    } public void mouseClicked(MouseEvent e) {
    } public void mouseEntered(MouseEvent e) {
    } public void mouseExited(MouseEvent e) {
    } public void mousePressed(MouseEvent e) {
    step++;
    bt.setText("Step"+step);
    } public void mouseReleased(MouseEvent e) {
    }
    }
      

  2.   

    我的意思是我上面代码应该是没有问题的,因为我把代码换到另一台电脑上运行都是没有错的。我MyEclipse的JDK版本是jse1.6的,版本应该也是没有问题。MyEclipse跑其他程序也都没有问题,为什么这个会报类型转换错误?
      

  3.   

      EventObject e = (EventObject)evt;   //显示无法Cast的错误,但是MouseEvent明明就是EventObject的子类?
         Button button=(Button)evt.getSource();  //显示evt没有getSource这个方法,该方法不是从EventObject继承的嘛?
    看到没有你把下面的evt下错了,应该是e才对。自己在看看。
      

  4.   

    没有错,我是因为evt无法调用getSource方法,才试着看evt是否能够转型为EventObject的。结果转型出错。MouseEvent是EventObject的子类,自然也继承了它的getSource方法
      

  5.   

    是古怪了,倒是有点怀疑是类import错了,但是想想那是很低级的问题,不应该想到那里去。
      

  6.   

    import也是没错的,我刚刚又在另一台机子上跑了,也是没问题的。应该是我这里的机子问题,不是语法问题。就是不知道我这环境出什么错了
      

  7.   

    关键是我用的jdk版本是1.6的,运行其他项目程序都没问题。唯独这个EventObject的继承关系出问题,纠结啊
      

  8.   


    package MyEvent;import java.awt.event.*;
    import java.awt.*;
    import java.util.EventObject;public class AdapterCounter extends Frame{
      private Button button=new Button("1");  public AdapterCounter(String title){
        super(title);
        //把MyMouseListener的实例注册为Button的监听器
        button.addMouseListener(new MyMouseListener(2));
        add(button);
        setSize(100,100);
        setVisible(true);
        this.addWindowListener(new WindowAdapter(){
         public void windowClosing(WindowEvent e){
         System.exit(0);
         }
        });
      }  public static void main(String args[]){
        new AdapterCounter("hello");
      }
    }class MyMouseListener extends MouseAdapter{
      private int step;  //决定Button上的标号每次增加的步长
      public MyMouseListener(int step){this.step=step;}
      public void mousePressed(MouseEvent e){
     EventObject evt = (EventObject)e;
         Button button=(Button)evt.getSource();
         int count=Integer.parseInt(button.getLabel());
         button.setLabel(new Integer(step+count).toString());  //把Button上的标号加step
      }
    }
      

  9.   

    尽量不要用包import,这样如果类路径中有本包的另外一个MouseEvent类的话,将优先匹配那个MouseEvent类。
      

  10.   

    谢谢,我将MouseEvent使用完整限定名就没错了。因为我是初学Java,刚刚听你点醒,原来我的工程文件中自定义了一个类名,MouseEvent。我想问一声,如果不使用包import,那要如何做呢?倘若我文件中需要使用数十个event包中的类,难道也不使用import吗?
      

  11.   

    包import方便啊,小心点用吧。
    语言特性就是这么着,没办法。
    我最初看到IBM出的那些代码都非常长,就很奇怪,后来知道人家早就建议不用包import。更有甚者,import都用得少,直接写冗长的类名到代码中去。大工不巧啊。