• Aktualisierte Forenregeln

    Eine kleine Änderung hat es im Bereich Forenregeln unter Abschnitt 2 gegeben, wo wir nun explizit darauf verweisen, dass Forenkommentare in unserer Heftrubrik Leserbriefe landen können.

    Forenregeln


    Vielen Dank

Animation mit Java

Shootergammler1

Anfänger/in
Mitglied seit
09.08.2004
Beiträge
93
Reaktionspunkte
0
Hallo Jungs und vll auch Mädels,
ääähm ja, also ich muss eine kleine Hausaufgabe machen und zwar soll ich eine kleine Animation meiner Wahl programmieren.

Meine Idee:
Ich lasse einen Text von links nach rechts laufen und lasse ihn dann am Rand stoppen. Ich habs probiert, schaffe es aber nicht...

Irgendwie wird mir der Text nicht angezeigt, irg find ich den Fehler nicht?! Kann mir jemand sagen was/wo ich was falsch gemacht habe , bitte mit ausführlicher erklärung!

Meine Befehle:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
*
* Beschreibung
*
* @version 1.0 vom 09.11.2007
* @author
*/

public class richtAnimation extends JFrame {
// Anfang Variablen
// Ende Variablen

public richtAnimation(String title) {
// Frame-Initialisierung
super(title);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) { System.exit(0); }
});
int frameWidth = 300;
int frameHeight = 300;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2 ;
setLocation(x, y);
Container cp = getContentPane();
cp.setLayout(null);
// Anfang Komponenten

// Ende Komponenten

setResizable(false);
setVisible(true);
}

// Anfang Ereignisprozeduren
// Ende Ereignisprozeduren

public static void main(String[] args) {
new richtAnimation("richtAnimation");
}
public void paint (Graphics g) {
Font f = new Font ("SansSerif", Font.BOLD, 20);
String Text = new String ("Bewegter Text");
FontMetrics fm = getFontMetrics (f);
g.fillRect(0,0,300,300);

int y;
int x=0;
int inc=2;
for (y=0;y<300;y++)
while (true) {
g.setColor (Color.blue);
g.fillRect (0,0, 300,300);
g.setColor (Color.yellow);
x += inc;
if (x+y > 0) {
inc = -2; x += inc;
}
else
if (x < 0) {
inc = +2; x += inc;
}
g.drawString (Text, x,y);

try { Thread.sleep (50); }
catch (InterruptedException ie) {}
}
}
}


danke!
 
Die paint-Methode wird im allgemeinen automatisch aufgerufen wenn etwas geändert wird.
Du allerdings änderst alles in der paint-methode, die kommt ja NIE dazu sich neu zu zeichnen weil du eine Endlosschleife (while TRUE)hast, und die paint-methode nie zu ende ausgeführt wird.

versuch mal ein this.validate(); nach jedem schleifendurchlauf, wohl wissend das das was du da gemacht hast nicht ganz optimal ist könnts das retten.

ansonsten das zeug auslagern und in die paint nur das rein was rein muss.
 
Ich hab jetzt zwar noch nix mit Java gemacht, zudem nervt Quellcode ohne Tabstops, aber was bitte sollen folgende Zeilen bedeuten?

for (y=0;y<300;y++)
while (true) {


Ne For Schleife ohne Funktion? For while ist mir gänzlich unbekannt. Ich kenn nur do while oder for next :confused:
 
AchtBit am 09.11.2007 22:44 schrieb:
Ich hab jetzt zwar noch nix mit Java gemacht, zudem nervt Quellcode ohne Tabstops, aber was bitte sollen folgende Zeilen bedeuten?

for (y=0;y<300;y++)
while (true) {


Ne For Schleife ohne Funktion? For while ist mir gänzlich unbekannt. Ich kenn nur do while oder for next :confused:
die funktion der for-schleife ist die while schleife.
er lässt 300 mal ne unendliche while schleife durchlaufen.
wobei die for-schleife nur ein einziges mal durchlaufen wird, bis das programm beendet wird.
 
AchtBit am 10.11.2007 10:32 schrieb:
klausbyte am 10.11.2007 00:05 schrieb:
die funktion der for-schleife ist die while schleife.

Fehlt da nicht noch die spitze Klammer auf? Ich kenn so ne Schreibweise nicht.
wenn du die klammern weg lässt, ist das nur auf den nächsten befehl bezogen.
der nächste befehl ist in dem fall halt die while schleife.

ansonsten würden ja konstruke wie:
if(irgendwas)
zahl = 1;
else
zahl = 0;

ewig lang werden wenn man da nohc extra die klammern setzen müsste.
 
klausbyte am 09.11.2007 22:26 schrieb:
Die paint-Methode wird im allgemeinen automatisch aufgerufen wenn etwas geändert wird.
Du allerdings änderst alles in der paint-methode, die kommt ja NIE dazu sich neu zu zeichnen weil du eine Endlosschleife (while TRUE)hast, und die paint-methode nie zu ende ausgeführt wird.

versuch mal ein this.validate(); nach jedem schleifendurchlauf, wohl wissend das das was du da gemacht hast nicht ganz optimal ist könnts das retten.

ansonsten das zeug auslagern und in die paint nur das rein was rein muss.

Jetzt nochmal ganz langsam, sorry, aber diesen Befehl
hatte ich noch nicht im Unterricht.

Wozu dient er und was macht er genau?
Und wo genau muss ich ihn jetzt einbauen?
 
Shootergammler1 am 10.11.2007 13:25 schrieb:
Jetzt nochmal ganz langsam, sorry, aber diesen Befehl
hatte ich noch nicht im Unterricht.
dann schlag ihn nach ;)
Und wo genau muss ich ihn jetzt einbauen?
hab ich doch geschrieben, an das ende jeden schleifendurchlaufs.
Ist auch keine Garantie das es funktioniert, nur ein Rettungsversuch. Wenn das nicht klappt musst du das ganze nochmal gescheit schreiben.
 
Also hab jetzt eine neue Befehlskette geschrieben und verschiebe nun ein Rechteck von links nach rechts und wieder nach links etc.... weil das mit this validate(); nicht gefunzt hat.

Jedoch seh ich net den Fehler, warum das Rechteck nicht wieder zurück geht, auch kann ich die geschwindigkeit des verschiebens nicht richtig einstellen....
kann da mir jemand unter die arme greifen?

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;

/**
*
* Beschreibung
*
* @version 1.0 vom 11.11.2007
* @author
*/

public class Rechteckanimation extends Frame {
// Anfang Variablen
double Pi = 3.14159265;
int z=0;
int a=0;
// Ende Variablen

public Rechteckanimation(String title) {
// Frame-Initialisierung
super(title);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) { System.exit(0); }
});
int frameWidth = 600;
int frameHeight = 600;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2 ;
setLocation(x, y);
//Container cp = getContentPane();
//cp.setLayout(null);
// Anfang Komponenten

// Ende Komponenten

setResizable(true);
setVisible(true);
}

// Anfang Ereignisprozeduren
// Ende Ereignisprozeduren

public static void main(String[] args) {
new Rechteckanimation("Rechteckanimation");
}
public Rechteckanimation () {
setBackground (Color.white);
setForeground (Color.black);
}
public void paint (Graphics g)
{
Graphics2D g2d = (Graphics2D) g;

Rectangle2D.Double Rechteck = new Rectangle2D.Double(10,150,50,50);
g2d.draw(Rechteck);

while (a!=2000000){
a++;
if(z<300){
z++;
}
else
if (z>=300){
z--;
}
g.setColor(Color.WHITE);
g.fillRect(0,0,600,600);
g.setColor(Color.BLACK);

AffineTransform Translation = new AffineTransform();
Translation.setToTranslation(z,150);
g2d.draw(Translation.createTransformedShape(Rechteck));
}
try {Thread.sleep(55000);} catch (InterruptedException e) {}
}
}
 
warum klatscht du schon wieder alles in die paint methode rein?
das ist unsauber und so wirst du nie deinen fehler finden.
evtl. wird die methode ab nem gewissen punkt scho wieder nimme beendet .. habs mir jetz garnicht mehr genauer angeschaut, da dich die konstruktive hilfe hier anscheinend eh nicht interessiert und du nur darauf hoffst das dir jemand einen code schreibt?
 
klausbyte am 16.11.2007 22:20 schrieb:
warum klatscht du schon wieder alles in die paint methode rein?
das ist unsauber und so wirst du nie deinen fehler finden.
evtl. wird die methode ab nem gewissen punkt scho wieder nimme beendet .. habs mir jetz garnicht mehr genauer angeschaut, da dich die konstruktive hilfe hier anscheinend eh nicht interessiert und du nur darauf hoffst das dir jemand einen code schreibt?

1. ;) nein! natürlich nicht. Was soll ich denn nicht in die paintmethode reinziehen?
gut wenn du mir genau die beispiele mal nennen würdest ;)

2. ich hab eine abbruchmethode.... die dauer a, wenn eine gewisse zahl erreicht ist, wird alles abgebrochen............
 
sauberer wäre es halt in jedem fall: in die paint methode gehören sachen wie das anordnen von bedienelementen wenn die größte geändert worden ist rein, z.b.
deine animation kannst du auch in einer eigenen methode definieren
dann hast du zumindest schon wieder mehr überblick..
 
Zurück