こんにちは、ニュース ティッカー/テキスト スクローラーを作成しています。私は次の方法を使用しています:
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が入力されないようです。とにかく、描画を開始する前にメトリックを取得できますか?