如何在java中制作一个连续循环的新闻Ticker

时间:2015-06-05 16:12:49

标签: java swing animation

我不了解你,但我在如何制作新闻自动收报机方面做了如此努力。我找到了可以将屏幕外的内容附加到屏幕背面的方法。这导致动画跳过整个角色。然后我找到了在文本完全脱离屏幕之前不会循环的方法。在询问了大量关于此问题的问题之后,我认为如果我只是为所有想知道如何制作它的人发布我的最终解决方案将会很好。你走了。

1 个答案:

答案 0 :(得分:-1)

import java.awt.Color;
import java.awt.Font;
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 Scroll2 extends JPanel implements ActionListener{ 
    private int x;
    private int x2;
    private int y;
    private int width;
    private String textIV;
    private Color textColorIV;
    private Color bGColorIV;
    private Font f=(new Font("SansSerif", Font.BOLD,34));
    Timer t;
    // TODO font size
    public Scroll2(String text, Color textColor, Color bGColor)
    {
        x=Integer.MIN_VALUE;
        x2=Integer.MIN_VALUE;
        y=0;
        textIV=text;
        this.setVisible(true);
        Timer refreshTimer = new javax.swing.Timer(1000/50, this);
        refreshTimer.start();
    }
    @Override
    protected void paintComponent(Graphics g)
    {

            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g;
            g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                    RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
            g.setFont(f);
          if ( x == Integer.MIN_VALUE ){
              width=g.getFontMetrics().stringWidth(textIV);
                x = 0;
                y = (int) (getHeight()*.6);

            }
          if ( x2 == Integer.MIN_VALUE ){
                x2 = g.getFontMetrics().stringWidth(textIV);
            }
        g.setColor(bGColorIV);
        g.fillRect(this.getX(), this.getY(), (int)this.getBounds().getWidth(), (int)this.getBounds().getHeight());
        g.setColor(textColorIV);

        g.drawString(textIV, x, y);
        g.drawString(textIV, x2, y);

    }

     public void refresh ()
        {
            if(x>=(-width)&&x2!=Integer.MIN_VALUE)
            {
                x=x-2;
                x2=x2-2;

            }
            if(x2<=-width&&x!=Integer.MIN_VALUE)
            {
                x2=width;
            }
            if(x<-width&&x!=Integer.MIN_VALUE)
            {
                x=width;
            }
            repaint();
        }

    @Override
    public void actionPerformed(ActionEvent e) {
        this.refresh();
    }
}