Hallo Leute
ich habe erst vor kurzem angefangen Java zu lernen. Ich habe jetzt eine GUI mit 4 buttons (oben,unten,links,rechts) und einem Kreis in der Mitte. Nun möchte ich, dass wenn ich z.B. den rechten Button klicke, der Kreis nach rechts geht (Nicht springt!)
Hier ist mein Versuch:
import java.awt.*;
import java.awt.event.*;
public class snake {
int x = 10;
int y = 10;
int i = 0;
int g = 0;
zeichenpanel panel = new zeichenpanel();
public static void main (String[] args) {
snake go = new snake();
go.los();
}
public void los() {
JFrame frame = new JFrame();
JButton button1 = new JButton("Rechts");
JButton button2 = new JButton("Links");
JButton button3 = new JButton("Hoch");
JButton button4 = new JButton("Runter");
frame.add(BorderLayout.EAST, button1);
frame.add(BorderLayout.WEST, button2);
frame.add(BorderLayout.NORTH, button3);
frame.add(BorderLayout.SOUTH, button4);
frame.add(BorderLayout.CENTER, panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 800);
frame.setVisible(true);
button1.addActionListener(new rechts());
button2.addActionListener(new links());
button3.addActionListener(new hoch());
button4.addActionListener(new runter());
}
class rechts implements ActionListener {
public void actionPerformed(ActionEvent event) {
g = 0;
i = 1;
panel.renn();
}
}
class links implements ActionListener {
public void actionPerformed(ActionEvent event) {
g = 0;
i = -1;
panel.renn();
}
}
class hoch implements ActionListener {
public void actionPerformed(ActionEvent event) {
i = 0;
g = -1;
panel.renn();
}
}
class runter implements ActionListener {
public void actionPerformed(ActionEvent event) {
i = 0;
g = 1;
panel.renn();
}
}
class zeichenpanel extends JPanel {
public void renn() {
for (int a = 0; a < 130; a++) {
x = x + i;
y = y + g;
panel.repaint();
try{
Thread.sleep(50);
} catch (Exception e) {}
}
}
public void paintComponent (Graphics g) {
g.setColor(Color.white);
g.fillRect(0,0,this.getWidth(), this.getHeight());
g.setColor(Color.green);
g.fillOval(x,y,40,40);
}
}
}```
Jedoch dauert es eine Weile und dann springt der Kreis zu seiner Endposition. Irgendwie werden die Zwischenschritte nicht angezeigt. Was mache ich falsch?