前提・実現したいこと
JFrame
内でspace
を押すと赤色のJPanel
を一定間隔で0.01秒おきに右側に移動させるようにして、赤が進むようになっています。しかし、実際にspace
を押すと下のコードの赤を進ませるfor
文が終了した状態で赤が表示されています。つまり、赤が進んでいるように見えません。理想は、for
文の途中で毎回赤を表示させて赤が移動して進んでいるように見えるようにしたいです。ソースコード2
がいい例でこれだとfor
の途中でも表示されます。どうすれば1
でfor
が終了した状態で表示されるのではなく2
のようにfor
の途中で毎回表示できるようになりますか。
簡単なサンプルコードもお願いします。
該当のソースコード
1
1import javax.swing.*; 2import java.awt.*; 3import java.awt.event.*; 4public class test02 extends JFrame implements KeyListener{ 5 int x=51,y=51;//xとy座標 6 JPanel panel,ball; 7 public static void main(String[] args){ 8 test02 cl = new test02("test02"); 9 } 10 test02(String title){ 11 setTitle(title); 12 setBounds(93,100,600,400); 13 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 14 15 setLayout(null); 16 17 panel = new JPanel(); 18 panel.setBackground(Color.BLACK); 19 panel.setBounds(x,y,50,50); 20 21 ball = new JPanel(); 22 ball.setBackground(Color.RED); 23 24 add(panel); 25 add(ball); 26 setResizable(false); 27 setVisible(true); 28 29 addKeyListener(this);//KeyListener 30 } 31 @Override 32 public void keyTyped(KeyEvent e){/*何かのキー(aなど)を押した場合の処理*/} 33 @Override 34 public void keyPressed(KeyEvent e){/*キーを入力した際の処理*/ 35 switch(e.getKeyCode()){ 36 case KeyEvent.VK_UP://上キー 上移動 37 y-=3; 38 break; 39 case KeyEvent.VK_DOWN://下キー 下移動 40 y+=3; 41 break; 42 case KeyEvent.VK_LEFT://左キー 左移動 43 x-=3; 44 break; 45 case KeyEvent.VK_RIGHT://右キー 右移動 46 x+=3; 47 break; 48 case KeyEvent.VK_SPACE://スペースキー 49 for(int i=x;i<x+350;i+=10){ 50 ball.setVisible(false); 51 ball.setBounds(i,y,10,10); 52 ball.setVisible(true); 53 try{ 54 Thread.sleep(1); 55 }catch(Exception a){ 56 } 57 } 58 break; 59 } 60 panel.setBounds(x,y,50,50); 61 if(x<0||x>537||y<0||y>315){ 62 System.out.println("DEATH"); 63 } 64 } 65 @Override 66 public void keyReleased(KeyEvent e){/*キーを離した際の処理*/} 67}
2
1import javax.swing.*; 2import java.awt.*; 3public class test01 extends JFrame{ 4 public static void main(String[] args){ 5 test01 f = new test01(); 6 } 7 test01(){ 8 setBounds(100,100,500,500); 9 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 10 getContentPane().setBackground(Color.WHITE); 11 setLayout(null); 12 setVisible(true); 13 14 JPanel panel = new JPanel(); 15 panel.setBackground(Color.RED); 16 panel.setBounds(100,100,10,10); 17 add(panel); 18 19 while(true){ 20 try{System.in.read();}catch(Exception e){} 21 for(int i=0;i<500;i++){ 22 panel.setBounds(i,100,10,10); 23 try{Thread.sleep(10);}catch(Exception e){} 24 } 25 } 26 } 27}
補足情報(FW/ツールのバージョンなど)
java jdk-14.0.2
java version "14.0.2" 2020-07-14
Java(TM) SE Runtime Environment (build 14.0.2+12-46)
Java HotSpot(TM) 64-Bit Server VM (build 14.0.2+12-46, mixed mode, sharing)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/20 08:40