iteye_12441 2010-04-10 00:32 采纳率: 100%
浏览 474
已采纳

请教swing中添加事件监听器的两种方式?

第一种方式:
class myframe extends JFrame implements actionListerner{
.......
......

myButton.addActionListener(this);

}

这种形式中,参数this是啥?为什麽不是监听类的对象?在下面第二种方式中,不用implements也可以实现,那么在这里用了implement有什麽用呢?

第二种方式:
class myframe extends JFrame{
.......
......

myButton.addActionListener(new actionListerner{.....});

}
其中new actionListerner这一段,这个叫匿名类吧?

我是初学,以前只懂一点Javascript,现在学java,感觉它的事件响应方面的语法好难懂.
关于事件监听,如果还有其他什麽语法方式,请告诉我.
或者还有其他什麽值得注意的,也请告诉我.

  • 写回答

1条回答 默认 最新

  • iteye_13460 2010-04-10 10:10
    关注

    [size=x-large][color=red]看了你问的问题,感觉你的JAVA基础还是很薄弱的.

    首先,回答你第一个问题,在java中,有两个变量名,this and super,就像JS中也有这样的,this.在JS中JS指的是onclick所在的这个控件吧.而在Java中,this指的是当前对象.super指的示的是父类.
    其次,你要明面JButton的addActionListener方法的参数是一个ActionListener接口类型的.这就是说任何继承ActionListener的类都可以做为参数传进来.

    最后,那么在继承一个接口之后,JAVA语言规定,必须实现ActionListener的所有方法.那么你就根据ActionListener的定义,实现它的public void actionPerformed(ActionEvent e);方法.[/color][/size]下面是给出的代码(JDK1.5运行通过的):
    这是你第一种方法实现.
    [code="java"]
    package com.Test;

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;

    /*

    • created time:下午11:48:11
    • creator: Tian Zhichao (chinoistzc@gmail.com)
      *
      /
      public class MyFrame extends JFrame implements ActionListener {
      JButton btn = new JButton("点我");
      /
      *

      • main()
      • 2010-4-8,下午11:48:11 */ public static void main(String[] args) { // TODO Auto-generated method stub MyFrame frm = new MyFrame(); frm.btn.addActionListener(frm); frm.add(frm.btn); frm.setSize(200, 400); frm.setVisible(true);

      }
      public void actionPerformed(ActionEvent e) {

      JOptionPane.showMessageDialog((JButton)e.getSource(), "有效果!");
      

      }

    }
    [/code]
    这是你第二种方法实现:
    [code="java"]package com.Test;

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;

    /*

    • created time:下午11:48:11
    • creator: Tian Zhichao (chinoistzc@gmail.com)
      *
      /
      public class MyFrame extends JFrame {
      JButton btn = new JButton("点我");
      /
      *

      • main()
      • 2010-4-8,下午11:48:11
        */
        public static void main(String[] args) {
        // TODO Auto-generated method stub
        MyFrame frm = new MyFrame();
        frm.btn.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {

            JOptionPane.showMessageDialog((JButton)e.getSource(), "有效果!");
        }});
        

        frm.add(frm.btn);
        frm.setSize(200, 400);
        frm.setVisible(true);

      }

    }[/code]

    [size=x-large][color=red]希望对你有所帮助[/color][/size]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?