Hallo,
ich habe eine GUI programmiert, die den Verlauf eines geworfenes Balls darstellt (Schräger Wurf)
Nun möchte ich aber mit Listenern arbeiten, dass z.b. bei einer Taste die Kurve auf der Zeichenfläche erschein etc…
Da treten 2 Probleme auf:
- beim Action Listener führt er zwar die ganzen Berechnungen durch, aber zeichnet nur zum Schluss das Endbild und nicht den Verlauf wie beim Start
- der KeyListener funktioniert gar nicht, habe da schon diverse Implementierungen durchgekaut…
Danke für eure Hilfe
Hier mein Code der Hauptklasse:
public class Simulation extends JFrame implements ActionListener{
private JButton bt_del,bt_start;
private JSpinner sp_geschw, sp_winkel, sp_ahoehe;
private JPanel pn_oben, pn_unten;
private MyJPanel pn_ball;
private Ball ball;
private JFrame f;
private Ballwurfmaschine bmaschine;
private ArrayList<Point2D.Double> points;
private final int BREITE = 400,HOEHE = 300;
private final double faktor = BREITE *0.01;
class MyKeyListener extends KeyAdapter {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_W) {
System.out.println("Test");
}
}
}
public Simulation(Ballwurfmaschine m){
super("Demo");
bmaschine = m;
ball = m.getBall();
points = bmaschine.getTable();
/**************************************************************
* Frame einrichten *
* ************************************************************/
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
setSize(650,400);
addKeyListener(new MyKeyListener());
pn_oben = new JPanel();
pn_unten = new JPanel();
SpinnerNumberModel m_geschw = new SpinnerNumberModel(30,0,500,0.5);
SpinnerNumberModel m_winkel = new SpinnerNumberModel(45,0,360,0.5);
SpinnerNumberModel m_hoehe = new SpinnerNumberModel(0,0,500,0.5);
sp_geschw = new JSpinner(m_geschw);
sp_winkel = new JSpinner(m_winkel);
sp_ahoehe = new JSpinner(m_hoehe);
bt_start = new JButton("Start");
bt_start.setActionCommand("starten");
bt_start.addActionListener(this);
bt_del = new JButton("Neu");
bt_del.setActionCommand("loeschen");
bt_del.addActionListener(this);
pn_oben.add(new JLabel("Starthöhe:"));
pn_oben.add(sp_ahoehe);
pn_oben.add(new JLabel("Startgeschwindigkeit:"));
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);
pn_ball = new MyJPanel(BREITE, HOEHE, bmaschine);
pn_ball.setPreferredSize(new Dimension(BREITE, HOEHE));
pn_unten.add(pn_ball);
add(pn_oben);
add(pn_unten);
setVisible(true);
zeichnen();
}
/**************************************************************
* Die Listener *
* ************************************************************/
//Action-Listener
public void actionPerformed(ActionEvent e){
Object obj = e.getSource();
if (obj instanceof JButton){
String cmd = e.getActionCommand();
if (cmd.equals("starten")){
double winkel = (Double) sp_winkel.getValue();
double ahoehe = (Double) sp_ahoehe.getValue();
double v0 = (Double) sp_geschw.getValue();
ball.setStartY(ahoehe);
bmaschine.setWinkel(winkel);
bmaschine.setV0(v0);
bmaschine.berechnePos();
zeichnen();
bmaschine.ausgabe();
}
else if (cmd.equals("loeschen")){
System.out.println("Test");
pn_ball.removeAll();
}
}
}
public void zeichnen(){
for (Point2D.Double p : points){
ball.setPosX(p.x*faktor);
ball.setPosY(p.y*faktor);
pn_ball.repaint();
try {
Thread.sleep(100);
} catch (InterruptedException ex) {}
}
}
public static void main(String[] args) {
double v0 = 30;
double winkel = 65;
Ball ball = new Ball(0,10);
Ballwurfmaschine maschine = new Ballwurfmaschine (ball, v0, winkel);
maschine.berechnePos();
new Simulation(maschine);
maschine.ausgabe();
}
}
```Vielen Dank für Eure Hilfe schon einmal im Voraus