तो मैं एक जेपीनल में रेखाएं खींच रहा हूं और मैं इसे हर बार एक सेकंड के लिए रोकना चाहता हूं। मैंने TimeUnit और Timer जैसी अन्य चीजों का उपयोग किया है जो मुझे इस वेबसाइट के आसपास देखने में मिली लेकिन अभी तक मैं इसे काम पर नहीं ला सकता। मेरे पास जेएफआरएएम पूरी तरह से स्थापित है और जाने के लिए तैयार है और यह सिर्फ आखिरी टुकड़ा है। इसके अलावा मैं सोच रहा था कि क्या जो भी तरीका काम करता है वह सिर्फ लाइनों के बजाय अन्य प्रकार की आकृतियों और चीजों पर लागू किया जा सकता है।

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();
      }
  }
}
0
Mr. Sister 17 अगस्त 2017, 09:11

3 जवाब

सबसे बढ़िया उत्तर

यहाँ आपके कार्य के लिए मेरा समाधान है

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);
            }
        });
    }
}
2
Sergiy Medvynskyy 17 अगस्त 2017, 09:41

आपकी छपाई में देरी नहीं हो रही है, लेकिन चूंकि आप लूप के लिए टाइमर.स्टार्ट () लिख रहे हैं, जो दो सेकंड से बहुत पहले निष्पादित हो जाता है और इस प्रकार अगले टाइमर को कॉल करता है। स्टार्ट () और इसलिए ऐसा लगता है जैसे टाइमर काम नहीं कर रहा है। मैं आपको एक और तर्क का उपयोग करने की सलाह दूंगा। और हाँ इस विधि को अन्य आकृतियों पर भी लागू किया जा सकता है।

0
Naveen Kumar 17 अगस्त 2017, 10:19

आप इसे अपने कोड में जोड़ सकते हैं

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();
    }
}

आप TimeUnit के स्थान पर Thread.sleep(1000) का भी उपयोग कर सकते हैं।

-2
Anshul Sharma 17 अगस्त 2017, 09:26