滚动标签

滚动标签,横向滚动和纵向滚动都可以!!!

package beans;

import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 * 滚动标签效果
 */
public class Test extends JFrame {

	private static final long serialVersionUID = -2397593626990759111L;
	private JPanel pane = null;
	private MoveLabel label = null;

	public Test() {
		super("Test ");
		pane = new JPanel();
		label = new MoveLabel("带有滚动效果的标签 ");
		pane.add(label);
		this.getContentPane().add(pane);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(300, 200);
		this.setVisible(true);
	}

	public static void main(String args[]) {
		new Test();
	}

	/**
	 * 带有滚动效果的Label标签
	 */
	private class MoveLabel extends JLabel implements Runnable {
		private static final long serialVersionUID = 1891684760189602720L;
		private String text = null;
		private Thread thread = null;
		private int x = 0;
		private int y = 0;
		private int w = 0, h = 0;
		public MoveLabel(String text) {
			super(text);
			this.text = text;
			thread = new Thread(this);
			thread.start();
		}
		public String getText() {
			return text;
		}
		public void setText(String text) {
			super.setText(text);
			this.text = text;
		}
		protected void paintComponent(Graphics g) {
			super.paintComponent(g);
			g.setColor(this.getBackground());
			g.fillRect(0, 0, w = this.getWidth(), h = this.getHeight());
			g.setColor(this.getForeground());
			g.setFont(this.getFont());
			g.drawString(text, 0, y);//竖向滚动效果
//			g.drawString(text, x, h-2);//横向滚动效果
		}
		public void run() {
			while (true) {
				x -= 2;
				y -= 2;
				if (x < -w) {
					x = w;
				}
				if (y < -h) {
					y = h;
				}
				this.repaint();
				try {
					Thread.sleep(50);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

 

你可能感兴趣的:(thread,swing)