私は自分のスイングプログラムのテレタイプエフェクトを作成しようとしています。基本的に、JFrameを新しい文字で40ms刻みで更新し、ユーザーにメッセージを「タイピングする」ことを望んでいます。しかし、私がこれをしようとすると、それは多く点滅します。方法は以下の通りです:Java - setText()をすばやく使用しているときにテキストがちらつくのを防ぐ方法
public static void animateTeletype(String input, JTextArea displayArea)
throws InterruptedException {
displayArea.setText("");
String s = "";
for(int i = 0; i<input.length(); i++) {
s += input.substring(i, i+1);
displayArea.setText(textToDisplay);
Thread.sleep(40);
displayArea.update(displayArea.getGraphics());
}
}
私はこの問題は、テキストの更新が速すぎることに由来し、処理できる以上の更新が必要であることを示しています。ティックタイムを短縮するとテキストのスクロールが遅すぎるため、この問題についてどうすればよいか分かりません。アドバイスありがとうございます!
**私はこの問題を解決しました。
static Timer timer = null;
public static void animateTeletype(final String input, final JTextArea displayArea) throws InterruptedException
{
final String[] s = new String[1];
s[0] = " ";
final int[] i = new int[1];
i[0] = 0;
displayArea.setText("");
timer = new Timer(30, new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
s[0] = input.substring(i[0], i[0]+1);
i[0]++;
displayArea.append(s[0]);
if(displayArea.getText().equals(input))
timer.stop();
}
});
timer.start();
}
あなたの[EDT](https://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html)でそのコードを実行していないことを望みます。 – Tom