- ベストアンサー
JavaのTimerTaskを使用した文字列描画の改善方法
- JavaのTimerTaskを使用して文字列を一文字ずつ描画するプログラムの改善方法について教えてください。
- 要件として、一文字ずつ描画し、読み終わった後に別の文字列を一文字ずつ描画するプログラムを作成したいと考えています。
- 現在のプログラムには改善の余地があり、修復が必要な箇所もあるかと思います。具体的な改善点や修復箇所についてアドバイスをいただけますか?
- みんなの回答 (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(); } } } }
お礼
おお!できました。ありがとうございます! 頂いたプログラミングをよく理解して今後もがんばります