`
1641606815
  • 浏览: 39014 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

java自定义事件监听

阅读更多
       Java自定义事件监听
一.将事件处理封装为特定事件的好处
  1.更好的体现Java面向对象的思想
   和给按钮等组件添加监听器一样,将鼠标点击等信息事件封装,达到面向对象的思想.
  2.使代码更加清晰,分工更加明确
   将一些事件处理封装为监听事件,使各个代码块各司其职,只处理特定的事件,这样便达到了代码功能的单一性.
自定义事件监听
 
二.实现界面上标签和按钮所显示的信息周期性改变
   类之间的关系
  


  三.代码如下
NewsNorm接口
package eventListener;
/**
 * 发送消息的格式
 * @author Andrew
 *
 */
public interface NewsNorm {
	public byte getType();
	public String getText();
}

TextNews类实现NewsNorm接口
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;
	}

}

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


LableModule自定义标签类
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();
			}
		}
	}
}

自定义按钮类
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));
	}

}


程序入口
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);
	}
}

四.程序运行截图



  • 大小: 33.9 KB
  • 大小: 28.2 KB
  • 大小: 18.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics