index0920さん
index0920さん
javaの質問です なぜ以下のプログラムがループするのかがわかりません
文字列を全文出し切った時点でとめたいのですがどうすればいいでしょうか?
方法と解説をおねがいします。
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import java.util.concurrent.TimeUnit;
public class MojiTest0730 {
JFrame frame1;
BufferStrategy bstrategy;
MojiTest0730(){
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(800 + insets.left + insets.right,600 + 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(),30,150);
}
public static void main(String args[]){
MojiTest0730 gtm =new MojiTest0730();
}
class MyTimerTask extends TimerTask{
int line = 0;
int position = 0;
String[] messages = {
"Hello、Worldハローワールド",
"aaa",
"年収7000万円 の米市職員退職"};
@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("MS ゴシック",Font.BOLD,24));
g.drawString(messages[line].substring(0,position), 200,500 + 40 * line);
System.out.println(messages[line].substring(0,position));
if((line==2) && (position==2)){
g.setFont(new Font("MS ゴシック",Font.BOLD,12));
//g.drawString(messages2[line].substring(0,position), 200,500 + 40 * line);
g.drawString("ねん", 200, 560);
}
if(position < messages[line].length()){
position += 1;
}else if(line == messages.length - 1){
position += 1;
}else{
position = 0;
line += 1;
}
}
bstrategy.show();
g.dispose();
}
}
お礼
frame1.getContentPane().setBackground(Color.WHITE); これで、背景が白になりました。 まだ継承とか分かりませんが、精進していきます。 ありがとうございました。