तो मैं एक जेपीनल में रेखाएं खींच रहा हूं और मैं इसे हर बार एक सेकंड के लिए रोकना चाहता हूं। मैंने 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();
}
}
}
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);
}
});
}
}
आपकी छपाई में देरी नहीं हो रही है, लेकिन चूंकि आप लूप के लिए टाइमर.स्टार्ट () लिख रहे हैं, जो दो सेकंड से बहुत पहले निष्पादित हो जाता है और इस प्रकार अगले टाइमर को कॉल करता है। स्टार्ट () और इसलिए ऐसा लगता है जैसे टाइमर काम नहीं कर रहा है। मैं आपको एक और तर्क का उपयोग करने की सलाह दूंगा। और हाँ इस विधि को अन्य आकृतियों पर भी लागू किया जा सकता है।
आप इसे अपने कोड में जोड़ सकते हैं
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)
का भी उपयोग कर सकते हैं।
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।