2017-08-17 2 views
0

JPanelで線を描いているので、描画するたびに1秒間ポーズしたいと思っています。私はTimeUnitやTimerのような他のものを使ってきましたが、私はこのウェブサイトの周りを見ていましたが、今のところ私はそれを動作させることができません。私はJFrameを準備して準備を整えました。これは最後の部分です。また、どのような方法でも、線の代わりに他のタイプの図形やものにも適用できるかどうかは疑問でした。Javaで進行中のペインティングを遅らせる方法

public class Panel extends JPanel { 
    Color [] colors = {Color.WHITE, Color.BLUE, Color.RED,Color.YELLOW,Color.CYAN,Color.GREEN, Color.PINK,Color.ORANGE}; 
    Random r = new Random(); 
    int amount; 
    public Panel(int amount) { 
     this.amount = amount; 
    } 
    public void paintComponent(Graphics g) { 
     Graphics2D g2 = (Graphics2D)g; 
     for (int i = 0; i < amount; i++) { 
      Timer timer = new Timer(2000, new ActionListener() { 
       public void actionPerformed(ActionEvent evt) {  
        g2.setColor(colors[r.nextInt(7)]); 
        g2.drawLine(r.nextInt(600), r.nextInt(600), r.nextInt(600), r.nextInt(600)); 
       } 
      }); 
      timer.setRepeats(false); 
      timer.start(); 
     } 
    } 
} 
+1

ペイントメソッドは、長時間実行されるタスクの実装を試みるべきではありません。基本的に2つの良い方法があります.1つは、塗料が呼び出されるたびに塗装する必要があるすべての線のリストを保存することです(これは数千の線に対して最速ですが遅くなります)。各ラインをバッファリングされたイメージに描画することです(これは、各ラインを個別に描画するまで、すべてのペイントでより多くの作業を行います)。どのアプローチを追求したいですか? –

+0

@RakeshKRスイングアニメーションのアドバイスは、アドバイスが間違っている理由を説明できるようになるまで、停止してください。 –

答えて

2

あなたのタスク

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Random; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 
import javax.swing.Timer; 
import javax.swing.WindowConstants; 

public class Panel extends JPanel { 
    Color[] colors = {Color.WHITE, Color.BLUE, Color.RED, Color.YELLOW, Color.CYAN, Color.GREEN, Color.PINK, Color.ORANGE}; 

    Random r = new Random(); 

    int amount, actual; 

    Color nextColor; 

    int x1, y1, x2, y2; 

    public Panel(int amount) { 
     this.amount = amount; 
     Timer timer = new Timer(2000, new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent evt) { 
       nextColor = colors[r.nextInt(7)]; 
       x1 = r.nextInt(600); 
       x2 = r.nextInt(600); 
       y1 = r.nextInt(600); 
       y2 = r.nextInt(600); 
       repaint(); 
       if (++actual >= amount) { 
        Timer t = (Timer) evt.getSource(); 
        t.stop(); 
       } 
      } 
     }); 
     timer.setRepeats(true); 
     timer.start(); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     if (nextColor != null) { 
      g.setColor(nextColor); 
      g.drawLine(x1, y1, x2, y2); 
     } 

    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       JFrame frm = new JFrame("Lines"); 

       frm.add(new Panel(10)); 
       frm.setSize(700, 700); 
       frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
       frm.setLocationRelativeTo(null); 
       frm.setVisible(true); 
      } 
     }); 
    } 
} 
+0

これは最終的に仕事をしたおかしい男!!!!!! –

-2

あなたはまた、TimeUnitでの代わりにThread.sleep(1000)を使用することができ、あなたのコード

public class Panel extends JPanel { 
Color [] colors = {Color.WHITE, Color.BLUE, Color.RED,Color.YELLOW,Color.CYAN,Color.GREEN, Color.PINK,Color.ORANGE}; 
Random r = new Random(); 
int amount; 
public Panel(int amount) { 
    this.amount = amount; 
} 
public void paintComponent(Graphics g) { 
    Graphics2D g2 = (Graphics2D)g; 
    for (int i = 0; i < amount; i++) { 
     Timer timer = new Timer(2000, new ActionListener() { 
       public void actionPerformed(ActionEvent evt) {  
        g2.setColor(colors[r.nextInt(7)]); 
        g2.drawLine(r.nextInt(600), r.nextInt(600), r.nextInt(600), r.nextInt(600)); 
TimeUnit.SECONDS.sleep(1); 
       } 
      }); 
     timer.setRepeats(false); 
     timer.start(); 
    } 
} 

にこれを追加することができます。ここで

+1

Event Dispatcher Threadでsleepを使用することは悪い考えです。 –

0

のための鉱山ソリューションは、あなたの印刷が遅くなっていませんが、あなたは2秒前に多くを実行するため、次の呼び出しますループのために)(timer.startを書いているので、ありますtimer.start()したがって、タイマが動作していないように見えます。 私はあなたに別のロジックを使用することをお勧めします。はい、この方法は他の図形にも適用できます。

関連する問題