A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 章成 黑马帝   /  2011-7-19 10:55  /  4726 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

JButton jb=new JButton("点下");
jb.addActionListener(this);
public void actionPerformed(ActionEvent  e){......}
这个this到底什么回事?还是说像线程里的synchronized(this),启动时需要一个对象才能启动,对象this,obj或别的对象都行。这里的addActionListener(this)是不是启动时也需要一个对象?

评分

参与人数 1技术分 +1 收起 理由
admin + 1 勤学好问,加分了

查看全部评分

4 个回复

倒序浏览
黑马网友  发表于 2011-7-19 11:18:57
沙发
this指的是当前所使用的类的某个实例化的对象!

评分

参与人数 1技术分 +1 收起 理由
admin + 1 我保证他看了还是不懂

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-19 11:54:39
藤椅
this表示对当前对象的引用,也就是你定义的这个类的实例,可以写成addActionListener(new ActionListener())。
    另外,this不能在static方法中。
回复 使用道具 举报
在此之前,请您以后把完整的代码贴出来,方便大家解答您的问题。
刚开始学Java的时候,看见GUI编程,就跟见那什么似的,一直认为,学会了这个就是高手了。当时一直在说“我kao,我可是会创建窗口、按钮、菜单、工具栏、表格啊,我不拽谁拽?”  现在都忘了差不多了。 嘿嘿,炫耀一下。毕竟咱们也算是同僚了,都热爱过GUI。

这个问题,要从事件监听器来说起。
以按钮为例,按钮本身只是一个控件,他只可以被咱们点击,但是当咱们点击按钮后,程序应该做出何种反应,就不是按钮应该考虑的问题了,而应该交给监听器来处理。
在Java中万物皆对象,因此,所谓的“监听器”也是一个类。
问题来了,如何写一个“监听器”类呢?
这其实和咱们的异常、线程、流一样,若父类是一个“异常类”、“线程类”、“流类”,那么子类也同样是一个“异常类”、“线程类”、“流类”。 显然,只要咱们自己写的类继承了一个监听器类,那么咱们的类,就是一个“监听器”类了。
但是,在GUI编程中,处理不同的事件,会用到不同的监听器,因此咱们应该根据需要,来选择到底要继承哪个“监听器”。
从您给出的“代码片段”看,目的是要监听一个按钮,而按钮被点击的时候,会触发“ActionListener”事件,因此咱们就继承“ActionListener”接口。
代码如下:[code=java]package org.cxy.test;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Demo extends JFrame implements ActionListener{
        private JButton btn;
        public Demo(String name){
                super(name);
               
                this.setBounds(100, 100, 300, 300);//设置窗口左上角坐标和窗口的宽、高。
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                this.setLayout(new FlowLayout()); // 修改JFrame的布局。
                this.btn = new JButton("点我");
                btn.addActionListener(this); // this代表当前对象,即Demo类型的对象。
                this.add(btn);
        }
        public void actionPerformed(ActionEvent arg0) {
                JOptionPane.showMessageDialog(this, "你居然敢点我?哼哼!");
        }
       
        public static void main(String[] args){
                Demo window = new Demo("Action事件测试!");
                window.setVisible(true);
        }
}[/code]刚才说了,若一个类继承了“监听器”,那么他也就是一个“监听器了”。因此Demo类继承了“ActionListener”,所以它也可以处理“ActionListener”事件。
至此,语句“btn.addActionListener(this); ”含义就好理解了:
给btn按钮增加一个监听器,这个监听器对象就是“Demo”类型的,当用户点击了btn按钮时,会程序自动前往Demo类的“actionPerformed”方法中,处理产生的事件。
因此,咱们现在所要做的就是在“actionPerformed”方法中,写上咱们的代码即可。
我再其内写的语句,就是显示一个对话框,并输出一个String对象。

嘿嘿,看咱们有缘,顺便提一下,完全没必要像上面那样写代码,使用匿名内部类就可以完成了,而且还省事。
代码如下:[code=java]package org.cxy.test;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Demo extends JFrame{
        private JButton btn;
        public Demo(String name){
                super(name);
               
                this.setBounds(100, 100, 300, 300);
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                this.setLayout(new FlowLayout());
                this.btn = new JButton("点我");
                btn.addActionListener(new ActionListener(){
                        public void actionPerformed(ActionEvent arg0) {
                                JOptionPane.showMessageDialog(Demo.this, "你居然敢点我?哼哼!");
                        }                       
                });
                this.add(btn);
        }
        public static void main(String[] args){
                Demo window = new Demo("Action事件测试!");
                window.setVisible(true);
        }
}[/code]这样代码看起来会更好
[ 本帖最后由 cxy_zy 于 2011-07-19  12:37 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
admin + 2 同学你很不错。

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-19 13:24:44
报纸

回复 沙发 的帖子

呵呵,大家都共同学习,共同进步!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马