JAVA跑马灯文字效果的实现:
1. 首先创建一个继承JFrame类的HorseRaceLightTextFrame窗体类,代码如下:
package com.example.horseracelighttext; import java.awt.Dimension; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.JFrame; public class HorseRaceLightTextFrame extends JFrame{ /** * */ private static final long serialVersionUID = -1760723807752896879L; public HorseRaceLightTextFrame() { // TODO Auto-generated constructor stub this.addWindowListener(new WindowListener() { @Override public void windowOpened(WindowEvent arg0) { // TODO Auto-generated method stub } @Override public void windowIconified(WindowEvent arg0) { // TODO Auto-generated method stub } @Override public void windowDeiconified(WindowEvent arg0) { // TODO Auto-generated method stub } @Override public void windowDeactivated(WindowEvent arg0) { // TODO Auto-generated method stub } @Override public void windowClosing(WindowEvent arg0) { // TODO Auto-generated method stub } @Override public void windowClosed(WindowEvent arg0) { // TODO Auto-generated method stub System.exit(0); } @Override public void windowActivated(WindowEvent arg0) { // TODO Auto-generated method stub } }); HorseRaceLightTextPanel panel = new HorseRaceLightTextPanel(); this.add(panel); new Thread(panel).start();// 启动新线程 this.setVisible(true); } public static void main(String[] args) { HorseRaceLightTextFrame frame = new HorseRaceLightTextFrame(); frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE); frame.setSize(360, 360); } }
2. 在HorseRaceLightTextFrame窗体类中创建内部面板类,该面板类实现了Runnable接口,重写JComponent类中的paint()方法和实现Runnable类中的run()方法。在paint完成跑马灯文字的绘制;在run()方法中实现改变跑马灯文字的x坐标值。
3. 将内部面板类HorseRaceLightTextPanel的实例添加到HorseRaceLightTextFrame窗口中,进行跑马灯文字效果的显示。内部面板类HorseRaceLightTextPanel代码如下:
package com.example.horseracelighttext; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import javax.swing.JPanel; /*** * 跑马灯文字效果Panel * @author lenovo' * */ public class HorseRaceLightTextPanel extends JPanel implements Runnable { String value = "这是一个文字跑马灯范例,谢谢!"; //需要绘制的文字 char[] drawChar = value.toCharArray(); int[] x = new int[drawChar.length]; //绘制每个字符的x坐标 int y = 100; //绘制文字的y坐标 @Override public void paint(Graphics g) { // TODO Auto-generated method stub g.clearRect(0, 0, getWidth(), getHeight()); //清除绘制前上下文内容 Font font = new Font("华文楷体", Font.BOLD, 20); //创建字体样式对象 g.setFont(font); //设置字体样式 g.setColor(Color.RED); //设置字体颜色 for (int j = drawChar.length - 1; j >= 0; j--) { g.drawString(drawChar[drawChar.length - 1 - j] + "", x[j], y); //绘制字符 } } @Override public void run() { // TODO Auto-generated method stub try { boolean flag = false; //为false表示第一次执行,x坐标进行等比递增,否则进行等差递增 while (true) { Thread.sleep(300); for (int i = drawChar.length - 1; i >= 0; i--) { if (!flag) { x[i] = x[i] + 20 * i; //x坐标进行等比递增 } else { x[i] = x[i] + 20; //x坐标进行等差递增 } if (x[i] >= 360 -20) { //大于窗体宽度-20时,坐标值为0 x[i] = 0; } } repaint(); //重新绘制图像 if (!flag) { flag = true; } } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
本文摘自:《JAVA开发实战1200例》---王家林