ok, das klingt jetzt doof, aber ich krieg das irgendwie nicht hin.
ums kurz zu umschreiben. in dem Java Kopf bis Fuß, war in einem kapitel, eine übungsaufgabe, wo man animation auf einem JPanel machen sollte.
jedenfalls, dacht ich mir, kann man das ja so verändern, dass diese animation immer wieder abläuft, wenn man auf einen button drückt - und genau das funktioniert nicht und ich weiß nicht wieso.
der code wäre:
[HIGHLIGHT="Java"]
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Animation2{
protected int x = 1;
protected int y = 1;
public MeinZeichenPanel zP;
public void setX(int _x){
x = _x;
}
public void setY(int _y){
y = _y;
}
public static void main(String[] args){
Animation2 gui = new Animation2();
gui.los();
}
public void los(){
JFrame frame = new JFrame();
frame.setTitle("Animationen
");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500,300);
JPanel bpanel = new JPanel();
JButton button = new JButton("Start");
button.addActionListener(new ButtonListener());
bpanel.add(button);
zP = new MeinZeichenPanel();
frame.getContentPane().add(BorderLayout.CENTER, zP);
frame.getContentPane().add(BorderLayout.SOUTH, bpanel);
frame.setVisible(true);
malen();
}
public void malen(){
for(int i = 0; i<124; i++, y++, x++){
x++;
zP.repaint();
try{
Thread.sleep(50);
}catch(Exception e){
}
}// for ende
setX(1);
setY(1);
}
class MeinZeichenPanel extends JPanel{
public void paintComponent(Graphics g){
g.setColor(Color.white);
g.fillRect(0,0,500,250);
g.setColor(Color.blue);
g.fillRect(x,y,500-x*2,250-y*2);
}
}
class ButtonListener implements ActionListener{
public void actionPerformed(ActionEvent ev){
malen();
}//Methode ende
}// innere Klasse ende
}
[/HIGHLIGHT]
also es passiert folgendes, am anfang funktioniert die animation noch (blaue rechteck wird kleiner)
aber wenn ich auf den button drücke passiert nix, außer dass das fenster scheinbar schon arbeitet (ich hab das gefühl, dass das Thread.sleep(50) schon funktioniert, der rest nur nicht) und am ende hat man ein großes blaues rechteck.
wenn man die malen() methode am anfang ausklammert(in der los() methode) bleibt das rechteck so wie es ist, aber wenn man auf den button drückt, passiert animationsmäßig immernoch nichts....
ich hab das gefühl, dass das problem irgendwo mit den x und y variablen liegt, aber mir fällt dazu echt nix mehr ein...
ums kurz zu umschreiben. in dem Java Kopf bis Fuß, war in einem kapitel, eine übungsaufgabe, wo man animation auf einem JPanel machen sollte.
jedenfalls, dacht ich mir, kann man das ja so verändern, dass diese animation immer wieder abläuft, wenn man auf einen button drückt - und genau das funktioniert nicht und ich weiß nicht wieso.
der code wäre:
[HIGHLIGHT="Java"]
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Animation2{
protected int x = 1;
protected int y = 1;
public MeinZeichenPanel zP;
public void setX(int _x){
x = _x;
}
public void setY(int _y){
y = _y;
}
public static void main(String[] args){
Animation2 gui = new Animation2();
gui.los();
}
public void los(){
JFrame frame = new JFrame();
frame.setTitle("Animationen
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500,300);
JPanel bpanel = new JPanel();
JButton button = new JButton("Start");
button.addActionListener(new ButtonListener());
bpanel.add(button);
zP = new MeinZeichenPanel();
frame.getContentPane().add(BorderLayout.CENTER, zP);
frame.getContentPane().add(BorderLayout.SOUTH, bpanel);
frame.setVisible(true);
malen();
}
public void malen(){
for(int i = 0; i<124; i++, y++, x++){
x++;
zP.repaint();
try{
Thread.sleep(50);
}catch(Exception e){
}
}// for ende
setX(1);
setY(1);
}
class MeinZeichenPanel extends JPanel{
public void paintComponent(Graphics g){
g.setColor(Color.white);
g.fillRect(0,0,500,250);
g.setColor(Color.blue);
g.fillRect(x,y,500-x*2,250-y*2);
}
}
class ButtonListener implements ActionListener{
public void actionPerformed(ActionEvent ev){
malen();
}//Methode ende
}// innere Klasse ende
}
[/HIGHLIGHT]
also es passiert folgendes, am anfang funktioniert die animation noch (blaue rechteck wird kleiner)
aber wenn ich auf den button drücke passiert nix, außer dass das fenster scheinbar schon arbeitet (ich hab das gefühl, dass das Thread.sleep(50) schon funktioniert, der rest nur nicht) und am ende hat man ein großes blaues rechteck.
wenn man die malen() methode am anfang ausklammert(in der los() methode) bleibt das rechteck so wie es ist, aber wenn man auf den button drückt, passiert animationsmäßig immernoch nichts....
ich hab das gefühl, dass das problem irgendwo mit den x und y variablen liegt, aber mir fällt dazu echt nix mehr ein...