I
IIv0ry
Gast
Hallo,
ich habe folgendes Problem.
Und zwar möchte ich einen Verlauf eines abgeworfenen Balls auf einem Canvas zeichnen, der alle paar Sekunden bzw Millisekunden die aktuelle Position des Balls zeichnet. Jedoch bekomme ich nur die ganze Kurve, sprich das Canvas aktualisiert die Oberfläche nicht.
Und ich weiß nicht, wie ich das Problem u.a. mit Repaint lösen kann....
Folgende wichtige Klassen habe ich:
Die Ballklasse:
[Java]
import java.awt.Graphics;
import javax.swing.JComponent;
public class Ball extends JComponent {
private double posX, posY, currentSpeed, speedX, speedY;
public Ball(double x, double y) {
posX = x;
posY = y;
public double getPosX() {
return posX;
}
public double getPosY() {
return posY;
}
public double setPosX(double x){
posX = x;
return posX;
}
public double setPosY(double y){
posY = y;
return posY;
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.fillOval((int)getPosX(), 300 - (int) getPosY(), 7, 7);
}
}
[/Java]
Die Oberflächenklasse:
[Java]
public class Ballsimulation{
private JButton bt_del;
private JButton bt_start;
private MyCanvas ca_zeichnung;
private JSpinner sp_geschw;
private JSpinner sp_winkel;
private JSpinner sp_ahoehe;
private JFrame frame;
private JPanel pn_oben, pn_unten;
private Ball ball;
public Ballsimulation(Ball b){
ball = b;
frame = new JFrame("Tenniskanone");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.setSize(600,400);
pn_oben = new JPanel();
pn_unten = new JPanel();
sp_geschw = new JSpinner();
sp_winkel = new JSpinner();
sp_ahoehe = new JSpinner();
bt_start = new JButton("Start");
bt_del = new JButton("Löschen");
pn_oben.add(new JLabel("Anfangshöhe:"));
pn_oben.add(sp_ahoehe);
pn_oben.add(new JLabel("Anfangsgeschwindigkeit:"));
pn_oben.add(sp_geschw);
pn_oben.add(new JLabel("Winkel:"));
pn_oben.add(sp_winkel);
pn_oben.add(bt_start);
pn_oben.add(bt_del);
frame.add(pn_unten,BorderLayout.SOUTH);
frame.add(pn_oben ,BorderLayout.NORTH);
ca_zeichnung = new MyCanvas(300,300, ball);
pn_unten.add(ca_zeichnung);
frame.setVisible(true);
}
[/Java]
und die eigene Canvas Klasse:
[Java]
class MyCanvas extends Canvas {
private Ballwurfmaschine bMaschine;
private ArrayList<Point2D.Double> points;
private Ball ball;
public MyCanvas(int szx, int szy, Ball b) {
super();
ball = b;
points = Ballwurfmaschine.tablePoints;
setSize(szx, szy);
}
@Override
public void paint(Graphics g){
g.setColor(Color.white);
g.fillRect(0, 0, getHeight(), getWidth());
g.setColor(Color.red);
for (Point2D.Double p : points){
ball.setPosX(p.x);
ball.setPosY(p.y);
ball.paint(g);
try {
Thread.sleep(50);
} catch (InterruptedException ex) {}
}
}
}
[/Java]
Weiß jemand, wo das Problem ist bzw wie das Problem (was meiner Ansicht irgendwie mit Repaint zu tun hat) lösen kann?
Danke für Eure Hilfe...
ich habe folgendes Problem.
Und zwar möchte ich einen Verlauf eines abgeworfenen Balls auf einem Canvas zeichnen, der alle paar Sekunden bzw Millisekunden die aktuelle Position des Balls zeichnet. Jedoch bekomme ich nur die ganze Kurve, sprich das Canvas aktualisiert die Oberfläche nicht.
Und ich weiß nicht, wie ich das Problem u.a. mit Repaint lösen kann....
Folgende wichtige Klassen habe ich:
Die Ballklasse:
[Java]
import java.awt.Graphics;
import javax.swing.JComponent;
public class Ball extends JComponent {
private double posX, posY, currentSpeed, speedX, speedY;
public Ball(double x, double y) {
posX = x;
posY = y;
public double getPosX() {
return posX;
}
public double getPosY() {
return posY;
}
public double setPosX(double x){
posX = x;
return posX;
}
public double setPosY(double y){
posY = y;
return posY;
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.fillOval((int)getPosX(), 300 - (int) getPosY(), 7, 7);
}
}
[/Java]
Die Oberflächenklasse:
[Java]
public class Ballsimulation{
private JButton bt_del;
private JButton bt_start;
private MyCanvas ca_zeichnung;
private JSpinner sp_geschw;
private JSpinner sp_winkel;
private JSpinner sp_ahoehe;
private JFrame frame;
private JPanel pn_oben, pn_unten;
private Ball ball;
public Ballsimulation(Ball b){
ball = b;
frame = new JFrame("Tenniskanone");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.setSize(600,400);
pn_oben = new JPanel();
pn_unten = new JPanel();
sp_geschw = new JSpinner();
sp_winkel = new JSpinner();
sp_ahoehe = new JSpinner();
bt_start = new JButton("Start");
bt_del = new JButton("Löschen");
pn_oben.add(new JLabel("Anfangshöhe:"));
pn_oben.add(sp_ahoehe);
pn_oben.add(new JLabel("Anfangsgeschwindigkeit:"));
pn_oben.add(sp_geschw);
pn_oben.add(new JLabel("Winkel:"));
pn_oben.add(sp_winkel);
pn_oben.add(bt_start);
pn_oben.add(bt_del);
frame.add(pn_unten,BorderLayout.SOUTH);
frame.add(pn_oben ,BorderLayout.NORTH);
ca_zeichnung = new MyCanvas(300,300, ball);
pn_unten.add(ca_zeichnung);
frame.setVisible(true);
}
[/Java]
und die eigene Canvas Klasse:
[Java]
class MyCanvas extends Canvas {
private Ballwurfmaschine bMaschine;
private ArrayList<Point2D.Double> points;
private Ball ball;
public MyCanvas(int szx, int szy, Ball b) {
super();
ball = b;
points = Ballwurfmaschine.tablePoints;
setSize(szx, szy);
}
@Override
public void paint(Graphics g){
g.setColor(Color.white);
g.fillRect(0, 0, getHeight(), getWidth());
g.setColor(Color.red);
for (Point2D.Double p : points){
ball.setPosX(p.x);
ball.setPosY(p.y);
ball.paint(g);
try {
Thread.sleep(50);
} catch (InterruptedException ex) {}
}
}
}
[/Java]
Weiß jemand, wo das Problem ist bzw wie das Problem (was meiner Ansicht irgendwie mit Repaint zu tun hat) lösen kann?
Danke für Eure Hilfe...