0

こんにちは、ニュース ティッカー/テキスト スクローラーを作成しています。私は次の方法を使用しています:

import java.awt.Color;
import java.awt.FontMetrics;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Scroll1 extends JPanel{
    private int x;
    private int x2;
    private int y;
    private String text;
    final int startX=-100;
    public Scroll1(int startX)
    {
        x2=-650;
        x = 20;
        y=150;
        text= "Some Words and others, and now this must be a longer text that takes up the whole panel/ frame for this test to work   ";
    }
    @Override
    public void paint(Graphics g)
    {
        g.setColor(Color.white);
        g.fillRect(0, 0, 400, 300);
        g.setColor(Color.black);
        g.drawString(text, x, y);
        g.drawString(text, x2, y);
        FontMetrics fm= g.getFontMetrics(); 
        System.out.println(fm.stringWidth(text));;
    }

    public void start() throws InterruptedException{
        while(true){
            while(x<= 650){
                x++;
                x2++;
                y = getHeight()/2;
                repaint();
                Thread.sleep(10);
                if(x2>650)
                    x2=-650;
            }

            if(x>=0)
            {
                x=-650; 
            }
        }
    }
    public static void main(String[] args) {
        JFrame frame = new JFrame("Scrolling Panel");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Scroll1 scrolling = new Scroll1(-100);

        frame.getContentPane().add(scrolling);
        frame.setSize(400, 300);
        frame.setVisible(true);
        try {
            scrolling.start();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

基本的に、描画されている 2 つの文字列があります。1 つは 0 の位置から開始し、もう 1 つは -650 の位置から開始します。ペイント メソッド内のフォント メトリックを使用して、-650 の数値を取得しました。問題は、その数値をハード コードする必要があり、別のメトリックを持つ別の文字列を作成すると、機能しないことです。フォントメトリクスを格納するwidthというインスタンス変数を作ってみたのですが、paintメソッドを呼ぶまでwidthが入力されないようです。とにかく、描画を開始する前にメトリックを取得できますか?

4

1 に答える 1