JAVA 跑马灯文字效果

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例》---王家林

 

转载于:https://www.cnblogs.com/tianyaxue/p/3178851.html

class ZiMupanel extends JFrame { public ZiMupanel() { Container con = this.getContentPane(); // 设置窗口名称 this.setTitle("滚动字幕"); // 设置布局管理器为 null ,方便 面板定位,一般使用null 布局时,将窗口设置不可改变大小 this.setLayout(null); // 设置窗口位置和大小 this.setBounds(300, 300, 460, 330); // 设置窗口可见 this.setVisible(true); // 设置不可改变大小 this.setResizable(false); // 设置当点击窗口的关闭按钮时退出 // 设置此窗体关闭,滚动面板不关闭 this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Panelfont1 p1 = new Panelfont1(); con.add(p1); p1.setBounds(15, 15, 175, 60); Panelfont2 p2 = new Panelfont2(); con.add(p2); p2.setBounds(195, 15, 250, 60); Panelneizi p3 = new Panelneizi(); con.add(p3); p3.setBounds(15, 80, 175, 80); Paneldirection p4 = new Paneldirection(); con.add(p4); p4.setBounds(195, 80, 250, 80); Panel5 p5 = new Panel5(); con.add(p5); p5.setBounds(15, 155, 430, 70); Panel6 p6 = new Panel6(); con.add(p6); p6.setBounds(15, 220, 430, 70); } } class Panelfont1 extends JPanel implements ActionListener{ public Panelfont1() { this.setBorder(BorderFactory.createTitledBorder("滚动字幕的文字大小控制"));//设置 面板边框 this.setLayout(new GridLayout(1, 2)); bigfont = new JRadioButton("大字体", false); smallfont = new JRadioButton("小字体", true); bigfont.addActionListener(this); smallfont.addActionListener(this); ButtonGroup sexRadioButtonGroup = new ButtonGroup();// 创建一个选按钮组 sexRadioButtonGroup.add(bigfont);// 将单选按钮对象添加到按钮组中 sexRadioButtonGroup.add(smallfont);// 将单选按钮对象添加到按钮组中 //Enumeration elements = sexRadioButtonGroup.getElements();// 遍历按钮组中的所有按钮 this.add(bigfont); this.add(smallfont); } public void actionPerformed(ActionEvent e) { if(bigfont.isSelected()){ fontSize = 50; }else { fontSize = 36; } Font font = new Font(fontName,Font.BOLD,fontSize);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值