Schönen guten Abend,
ich wollte zwei Kreise auf einem Panel kreisen lassen. Gleicher Radius, gleiche Sleeptime, nur dass sie sich entgegengesetzt drehen, sprich sich pro Umlauf zwei mal überlappen. tut aber nicht.
Er macht mir immer nur den zweiten Thread.
Habe einfach zwei neue Threads hintereinander angefügt.
Warum wechseln sich die Threads nicht ab? Ich hab sie doch beide auf den EDT gelegt????:L
Hier die Quellen:
und noch mein DrawPane
Idee?
Dane & Gruß,
myjday
ich wollte zwei Kreise auf einem Panel kreisen lassen. Gleicher Radius, gleiche Sleeptime, nur dass sie sich entgegengesetzt drehen, sprich sich pro Umlauf zwei mal überlappen. tut aber nicht.
Er macht mir immer nur den zweiten Thread.
Habe einfach zwei neue Threads hintereinander angefügt.
Warum wechseln sich die Threads nicht ab? Ich hab sie doch beide auf den EDT gelegt????:L
Hier die Quellen:
Java:
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Oberflaeche extends JFrame {
static DrawPane p;
static DrawPane q;
public static void main(String[] args) {
Runnable r = new Runnable() {
public void run() {
JFrame f = new JFrame("MyDraw 2010");
f.setSize(new Dimension(500, 500));
f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
p = new DrawPane();
q = new DrawPane();
f.add(p);
f.add(q);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
};
EventQueue.invokeLater(r);
new Thread() {
public void run() {
while (true) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
int radius = 150;
p.x = p.getWidth()/2 + (int) (radius * Math.cos(Math.toRadians(p.winkel)));
p.y = p.getHeight()/2 + (int) (radius * Math.sin(Math.toRadians(p.winkel)));
p.repaint();
p.winkel++;
}
});
try {
Thread.sleep(10);
} catch (InterruptedException in) {
}
}
};
}.start();
new Thread() {
public void run() {
while (true) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
int radius = 150;
q.x = q.getWidth()/2 + (int) (radius * Math.cos(Math.toRadians(q.winkel)));
q.y = q.getHeight()/2 + (int) (radius * Math.sin(Math.toRadians(q.winkel)));
q.repaint();
q.winkel--;
}
});
try {
Thread.sleep(10);
} catch (InterruptedException in) {
}
}
};
}.start();
}
}
und noch mein DrawPane
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JPanel;
public class DrawPane extends JPanel {
public int x;
public int y;
public int z;
public int winkel;
public DrawPane() {
this.x = this.getWidth()/2;
this.y = this.getHeight()/2;
this.z = 20;
this.winkel = 0;
}
@Override
protected void paintComponent(Graphics g) {
// TODO Auto-generated method stub
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(Color.RED);
g2.fillOval(x, y, z, z);
}
}
Idee?
Dane & Gruß,
myjday