• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字制限節約のためimportは省きます)

JavaのTimerTaskを使用した文字列描画の改善方法

このQ&Aのポイント
  • JavaのTimerTaskを使用して文字列を一文字ずつ描画するプログラムの改善方法について教えてください。
  • 要件として、一文字ずつ描画し、読み終わった後に別の文字列を一文字ずつ描画するプログラムを作成したいと考えています。
  • 現在のプログラムには改善の余地があり、修復が必要な箇所もあるかと思います。具体的な改善点や修復箇所についてアドバイスをいただけますか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

import javax.swing.*; import java.awt.*; import java.awt.image.*; import java.util.*; public class Q5995266 { JFrame frame1; BufferStrategy bstrategy; Q5995266(){ frame1=new JFrame("ゲームテスト"); frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame1.setBackground(Color.WHITE); frame1.setResizable(false); frame1.setVisible(true); Insets insets = frame1.getInsets(); frame1.setSize(600 + insets.left + insets.right,400 + insets.top + insets.bottom); frame1.setLocationRelativeTo(null); frame1.setIgnoreRepaint(true); frame1.createBufferStrategy(2); bstrategy = frame1.getBufferStrategy(); java.util.Timer t=new java.util.Timer(); t.schedule(new MyTimerTask(),10,500); } public static void main(String args[]){ Q5995266 gtm =new Q5995266(); } class MyTimerTask extends TimerTask{ /* インスタンス変数として持ってみる */ int line = 0; int position = 0; /* コンストラクタで与えてもいいかもしれませんね */ String[] messages = { "Hello、Worldハローワールド", "えんがち", "あつい" }; @Override public void run() { Graphics g = bstrategy.getDrawGraphics(); if(bstrategy.contentsLost()==false){ /* 一応全部消して書き直すようにしてますが、これが必要なのか自信がありません。とりあえずそれっぽい動きはしています。 */ Insets insets = frame1.getInsets(); g.clearRect(insets.left,insets.top,insets.right - insets.left,insets.bottom - insets.top); g.translate(insets.left,insets.top);//左上文字は別 g.setColor(Color.BLUE); g.setFont(new Font("SansSerif",Font.BOLD,20)); for(int i = 0;i < line ;i++){ g.drawString(messages[i], 100,100 + 50 * i); } System.out.println(messages[line].substring(0,position)); g.drawString(messages[line].substring(0,position), 100,100 + 50 * line); if(position < messages[line].length()){ position += 1; }else{ if(line == messages.length - 1){ }else{ position = 0; line += 1; } } bstrategy.show(); g.dispose(); } } } }

arinkoZ
質問者

お礼

おお!できました。ありがとうございます! 頂いたプログラミングをよく理解して今後もがんばります

関連するQ&A

専門家に質問してみよう