java图形界面的一个小问题

viki34 2011-05-31 09:20:33
就是想问一下 把ActionListener放到类内和类外的区别 源代码如下:
package cha1;

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

import javax.swing.*;

public class Test6 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MyFrame a = new MyFrame();
}

}

class MyFrame extends JFrame {
JButton b1;
JTextArea text;

public MyFrame() {
super();
b1 = new JButton("button1");
text = new JTextArea();

JPanel cont = (JPanel) this.getContentPane();
cont.add(b1, BorderLayout.CENTER);
cont.add(text, BorderLayout.NORTH);

b1.addActionListener(new MyListener(this));
this.setBounds(250, 250, 250, 250);

this.setVisible(true);
}
}

class MyListener implements ActionListener {
MyFrame myframe;

public MyListener(MyFrame myframe) {
// TODO Auto-generated constructor stub
this.myframe = myframe;}

public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
myframe.text.append("aa");
}
}
再如果把监听放到 MyFrame类内
放到外面会经常出错
求强人解释 Listener起什么作用
...全文
100 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianyuanfeige 2011-06-03
  • 打赏
  • 举报
回复
可以参考下内部类的实现方法,内部类可以访问包含类的私有变量和方法啊。在外部实现就没只有使用要监听类的公有方法了,前者方便,其实也应该实现为内部类。
wblzu 2011-06-02
  • 打赏
  • 举报
回复
事件处理,必然由这三个组成。事件源,事件(event),监听器(Listener),而这三个都是对象,java中,所有东西都是对象。事件源顾名思义,是产生事件的对象;事件是由事件源产生,比如,一个button可以看作事件源,点击一下该button就可以产生事件,你可以看API文档了解这些。而监听器是用来监听事件的,一旦注册过的事件源产生事件,监听器会监听到,做出相应的处理,比如,可以显示一幅图片等。
事件的处理是注册机制,就是事件源对象只有注册了相应的监听器,该事件源产生事件时该监听器才会处理。
listener就是监听器,监听器类放在里面和放在外面应该都可以,不过我一般放在里面,因为事件源如果是private私有的,在类外面是不可以用的,而监听器类一般都得用到事件源对象
tangshaoge 2011-06-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tangshaoge 的回复:]
是个接口。通过在对象中实现它规定的方法就可以响应事件了。
[/Quote]
这种问题到java API中查一下,你会有一个全面本质的认识。
tangshaoge 2011-06-01
  • 打赏
  • 举报
回复
是个接口。通过在对象中实现它规定的方法就可以响应事件了。

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧