Java swing 实现字体滚动

Java swing 实现字体滚动,swing跑马灯主要的技术便是线程,利用线程控制组件上的文字滚动。

swing自定义组件,实现字体滚动:

import java.awt.Graphics;
import java.util.concurrent.ExecutorService;

import javax.swing.JButton;
import javax.swing.JLabel;


/**
 * 显示界面的组件实体类
 * @author 崔耀强   20150507
 * @version 1.1
 * */

public class MyComponent extends JButton {

	private static final long serialVersionUID = 1L;
	private JLabel jl2;//放value
	private String[] msg;

	private int x=90,y=17;
	private int i=0;
	private Roll roll;
	private ExecutorService pool;
	public static boolean flag;


 
	public JLabel getJl2() {
		return jl2;
	}

	public void setJl2(JLabel jl2) {
		this.jl2 = jl2;
	}

	public MyComponent() {
		super();
		this.setLayout(null);
		JLabel jl2=new JLabel();
		this.jl2=jl2;
		jl2.setBounds(0, 0, 100, 30);
		this.add(jl2);
	}

	/**
	 * 设置显示值
	 * */
	public void setArrText(String[] msg){
		this.msg=msg;
		/*
		 * 滚动实现
		 * */
		if(msg!=null&&msg.length>0){
			flag=true;
			pool=ThreadGroupUtil.getInstance();
			if(roll==null){
				roll=new Roll();
				//	roll.start();
				pool.execute(roll);
			} 
		}else{
			flag=false;
		}
	}

	/**
	 *  滚动线程,当有业务值传进来时候,启动该线程
	 */
	class Roll extends Thread{
		@Override
		public void run(){ 
			while(flag){
				try {
					Thread.sleep(100);
					if(jl2.getText()!=null){
						jl2.setText(null);
					}
				} catch (InterruptedException e) {
				}
				if((x-=1) > -25){
					continue;
				} 
				i = ++i % msg.length;

				try {
					Thread.sleep(400);
				} catch (InterruptedException e) {
				}
				x=90;
			}
		}
	} 
	@Override
	public void paint(Graphics g) {
		super.paint(g);
		if(msg!=null){
			if(i

工具类,管理线程



import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


/**
 * 单例实现线程池类,管理组件滚动产生的线程
 * @author 崔耀强 
 * @version 1.1
 *
 */
public class ThreadGroupUtil {

	private static ExecutorService pool = null;
	private static int size;  
	static {  
		 
			size=400;
		System.out.println(size);
		pool = Executors. newFixedThreadPool(size);
	}  

	/**
	 * 得到单例的线程池,线程池有大小,大小为设备组件总数的二倍
	 * @return ExecutorService 线程池
	 */
	public static ExecutorService getInstance() {  
		return pool;  
	}  
}

测试类

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class TestRoll extends JFrame{

	/**
	 * @param args
	 */
	public TestRoll() {
		
		JPanel jp=new JPanel();
		jp.setLayout(null);
		MyComponent component=new MyComponent();
		component.setBounds(20,30, 100, 30);
		jp.add(component);
		component.setArrText(new String []{"张三","李四","王五"});
		this.getContentPane().add(jp);
		this.setSize(300,300);
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new TestRoll();
	}

}

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程

你可能感兴趣的:(java)