• 滚动字幕


    昨天培训讲了JPanel的paint方法,突然想到以前看到过滚动字幕是靠paint方法做的,于是乎又是各种百度找模版,写了个滚动字幕的Panel。

    做的是左右来回滚动的那种。

    package com.raikou.MusicPlayer;
    
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.RenderingHints;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JPanel;
    import javax.swing.Timer;
    
    public class PanelTitle extends JPanel {
    
        private static final long serialVersionUID = 1L;
        private String message = " ";
        private int xCoordinate = 0;
        private int yCoordinate = 10;
        private int count=0;
        private boolean flag = false;
        private int delay = 0;
        
        public PanelTitle(String message) {
            this.message = message;        
            Timer timer = new Timer(100, new TimerListener());
            timer.start();
        }
        
        public void restr(String message)
        {
            this.message = message;
            xCoordinate = 0;
            
        }
        
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            yCoordinate = getHeight()/2 + 4;
            //System.out.println(getWidth());
            Graphics2D g2 = (Graphics2D)g;
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
            //System.out.println( message.getBytes().length);
            int textWidth = getFontMetrics(g2.getFont()).bytesWidth(message.getBytes(), 0, message.getBytes().length);
            //System.out.println(textWidth);
            
            if(!flag)
            {//设置字符串到达最左端或最右端时停留3秒
                delay++;
                if(delay>30)
                {
                    flag = true;
                    delay = 0;
                }
            }
            else
            {
            if (textWidth > getWidth())
            {
                if(xCoordinate>=-(textWidth-getWidth()+5)&&count%2==0)
                {
                    xCoordinate -= 2;
                    if(xCoordinate <=-(textWidth-getWidth()+5))
                    {
                        count++;
                        flag = false;
                    }
                }
                
                else
                    if(xCoordinate <= 5 && count%2!=0)
                    {
                        xCoordinate += 2;
                        if(xCoordinate >= 5)
                        {
                            count++;
                            flag = false;
                        }
                    }
            }
            }
            g.drawString(message, xCoordinate, yCoordinate);
        }
    
        class TimerListener implements ActionListener
        {
            public void actionPerformed(ActionEvent e)
            {
                repaint();
            }
        }
    }
  • 相关阅读:
    t
    bert4keras
    embeding应用-airbnb推荐
    The Neural Autoregressive Distribution Estimator
    3.redis desktop manager--redis 可视化工具安装及使用
    Day06作业(postman接口测试)
    DRF学习day01(web应用模式,api接口,RESTful API规范,序列化,Django Rest_Framework)
    restFul接口设计规范
    Vue学习之荏苒资讯项目(一)
    微信小程序开发四:Promise的使用,解决回调地狱
  • 原文地址:https://www.cnblogs.com/raikouissen/p/3313517.html
Copyright © 2020-2023  润新知