java自定义事件监听

[size=large][color=blue]Java自定义事件监听[/color][/size]
[size=medium][color=violet] 一.将事件处理封装为特定事件的好处[/color][/size]
1.更好的体现Java面向对象的思想
和给按钮等组件添加监听器一样,将鼠标点击等信息事件封装,达到面向对象的思想.
2.使代码更加清晰,分工更加明确
将一些事件处理封装为监听事件,使各个代码块各司其职,只处理特定的事件,这样便达到了代码功能的单一性.
自定义事件监听

[size=medium][color=violet]二.实现界面上标签和按钮所显示的信息周期性改变[/color][/size]
类之间的关系

[img]http://dl.iteye.com/upload/attachment/0071/7767/983692ff-6105-3971-b8e6-b0600c9b33a2.png[/img]
[img]http://dl.iteye.com/upload/attachment/0071/7769/217f5b02-24b8-3eaf-9f83-2daf924e76c5.png[/img]
[color=violet][size=medium]三.代码如下[/size][/color]
[color=red]NewsNorm接口[/color]

package eventListener;
/**
* 发送消息的格式
* @author Andrew
*
*/
public interface NewsNorm {
public byte getType();
public String getText();
}

[color=red]TextNews类实现NewsNorm接口[/color]

package eventListener;
/**
* 发送文本信息
* @author Andrew
*
*/
public class TextNews implements NewsNorm{

private String str;
public TextNews(String str){
this.str = str;
}
public byte getType() {
return 0;
}
public String getText() {
return str;
}

}

[color=red]ShowNews接口[/color]

package eventListener;
/**
* 组件显示消息的接口
* @author Andrew
*
*/
public interface ShowNews {
public void processNews(NewsNorm n);
}


[color=red]LableModule自定义标签类[/color]

package eventListener;

import javax.swing.JLabel;

/**
* 自定义标签组件
* @author Andrew
*
*/
public class LableModule extends JLabel implements ShowNews{

public void processNews(NewsNorm n) {
String str = n.getText();
this.setText(str);
}

}

ProThread线程类

package eventListener;

import java.util.ArrayList;
import java.util.List;

/**
* 处理消息的线程
* @author Andrew
*
*/
public class ProThread extends Thread{
private List<ShowNews> list = new ArrayList<ShowNews>();

public void addNewsListener(ShowNews sh){
list.add(sh);
}
public void run(){
int num = 1;
while(true){
String str = "消息"+num;
for(int i=0; i<list.size(); i++){
NewsNorm n = new TextNews(str);
ShowNews sh = list.get(i);
sh.processNews(n);
}
num ++;
try {
Thread.sleep(600);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

[color=red]自定义按钮类[/color]

package eventListener;

import java.awt.Dimension;

import javax.swing.JButton;

/**
* 自定义按钮监听事件
* @author Andrew
*
*/
public class ButtonModule extends JButton implements ShowNews{

public void processNews(NewsNorm n) {
String str = n.getText();
this.setText(str);
this.setPreferredSize(new Dimension(100,30));
}

}


[color=red]程序入口[/color]

package eventListener;

import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.JFrame;

/**
* 程序入口
* @author Andrew
*
*/
public class Main {

/**
* 主函数
*/
public static void main(String[] args) {
Main m = new Main();
m.setUpFrame();
}
private void setUpFrame(){
JFrame frame = new JFrame("自定义事件监听");
frame.setSize(new Dimension(400,300));
frame.setLayout(new FlowLayout());
//实例化事件处理线程对象
ProThread pr = new ProThread();
//实例化自定义标签对象
LableModule la = new LableModule();
//实例化自定义按钮对象
ButtonModule bu = new ButtonModule();

pr.addNewsListener(bu);
pr.addNewsListener(la);
//启动消息处理线程
pr.start();

frame.add(la);
frame.add(bu);
frame.setVisible(true);
}
}

[color=violet][size=medium]四.程序运行截图[/size][/color]

[img]http://dl.iteye.com/upload/attachment/0071/7798/93a562c1-e01f-3ddb-8289-3d159cf8ce88.png[/img]

猜你喜欢

转载自blog.csdn.net/Andreaw/article/details/84268732
今日推荐