Liebe Community,
ich möchte sehr gerne nach einem Tastendruck in einem JPanel eine kurze Animation ablaufen lassen (z.B. Punkt bewegt sich in eine Richtung).
Sowohl das KeyEvent als auch die Animation (über die Methode paintCompomnent(Graphic g) einer extendet Klasse Panel) funktionieren, sofern sie im Programmablauf getrennt voneinander ablaufen. Die Animation "auf Knopfdruck" will aber einfach nicht funktionieren. Ich kann den Fehler in Code und/ oder Logik nicht ausmachen.
Ich übergebe Euch am Besten einfach mal den Code für beide Klassen (eine dritte Klasse startet das Programm mit der main-Methode):
ich möchte sehr gerne nach einem Tastendruck in einem JPanel eine kurze Animation ablaufen lassen (z.B. Punkt bewegt sich in eine Richtung).
Sowohl das KeyEvent als auch die Animation (über die Methode paintCompomnent(Graphic g) einer extendet Klasse Panel) funktionieren, sofern sie im Programmablauf getrennt voneinander ablaufen. Die Animation "auf Knopfdruck" will aber einfach nicht funktionieren. Ich kann den Fehler in Code und/ oder Logik nicht ausmachen.
Ich übergebe Euch am Besten einfach mal den Code für beide Klassen (eine dritte Klasse startet das Programm mit der main-Methode):
Code:
package Animation2;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class GrafikM extends JPanel{
private int a;
private int b;
public GrafikM(){
a = 300;
b = 300;
}
public void erhoeheA(){
a++;
}
public void erhoeheB(){
b--;
}
public int gibAnfangA(){
return a;
}
public void setA(int aP){
a = aP;
}
public int gibAnfangB(){
return b;
}
public void setB(int bP){
b = bP;
}
public void paintComponent(Graphics g){
ImageIcon i = new ImageIcon("/Users/user/Documents/workspace/KopfBisFuss/src/Animation/mStand.png");
i.paintIcon(this, g, a, b);}
}
Code:
package Animation2;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import klassen2.MeinZeichenPanel;
public class Hauptklasse implements ActionListener, Runnable{
private int x;
private int y;
JFrame frame;
Container cp;
GrafikM zeichenPanel;
public Hauptklasse(){
x = 70;
y = 70;
los();
effekt();
}
public void los(){
frame = new JFrame();
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
cp = frame.getContentPane();
frame.setSize(640, 480);
frame.setVisible(true);
}
public void effekt(){
JButton button1 = new JButton("Spring!");
button1.addActionListener(this);
zeichenPanel = new GrafikM();
cp.add(zeichenPanel);
cp.add(BorderLayout.SOUTH, button1);
frame.setVisible(true);
int anfangA = zeichenPanel.gibAnfangA();
int anfangB = zeichenPanel.gibAnfangB();
for(int i = 0; i<80; i++){
zeichenPanel.erhoeheB();
zeichenPanel.repaint();
try{
Thread.sleep(5);
} catch (Exception e){}
}
zeichenPanel.setA(anfangA);
zeichenPanel.setB(anfangB);
zeichenPanel.repaint();
}
public void actionPerformed(ActionEvent l){
effekt();
System.out.println(l.getActionCommand());
}
public void run(){
effekt();
}
}
Zuletzt bearbeitet von einem Moderator: