zoukankan      html  css  js  c++  java
  • 滚动字幕

    昨天培训讲了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();
            }
        }
    }
  • 相关阅读:
    实验综合-2021.1.31
    利用文件上传漏洞远程控制服务器
    [转载]文件上传漏洞
    第五周学习视频(二)
    第五周学习视频(一)
    第四周——上课笔记(二)
    第四周——上课笔记(一)
    第四周学习视频(一)
    mooc视频笔记(哈工大)第4讲-关系模型之关系代数
    第三周学习视频(二)
  • 原文地址:https://www.cnblogs.com/raikouissen/p/3313517.html
Copyright © 2011-2022 走看看