Instanz von Graphics in run()

Status
Nicht offen für weitere Antworten.

DarkwingDuck

Mitglied
Hallo Zusammen! :D

Ich habe die Forumsuche benutzt, aber die bereits existierenden Threads haben mir nicht wirklich geholfen. Ich hoffe, dass ich hier keinen nerve :wink:

Also mein Problem ist folgendes: Ich möchte einfach nur in einem Thread zeichnen und ich kriege es einfach nicht hin mir eine Instanz von Graphics zu erzeugen. Also mein Code ist folgender:
Code:
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class Draw extends Frame implements WindowListener
{
	private static final long serialVersionUID = 1L;
	public static void main(String[] args)
	{
		new Draw();
		DrawToo df = new DrawToo();
		Thread t = new Thread(df);
		t.start();
	}
	
	public Draw()
	{
		setLayout(null);
		setTitle("Draw");
		setSize(1024, 768);
		setVisible(true);
		addWindowListener(this);
	}
	
	public void paint(Graphics g)
	{
		g.setColor(Color.RED);
		g.fillRect(100, 100, 100, 100);
	}
}


class DrawToo extends Frame implements Runnable
{
	public void run()
	{
		Graphics g = new Graphics();
		g.setColor(Color.BLUE);
		g.drawRect(300,300,100,100);
	}
}

Ich steh noch ziemlich am Anfang und es tut mir leid wenn ich dumme Fragen stelle, aber ich hoffe ihr helft mir trotzdem :roll:

Vielen Dank schonmal
DarkwingDuck
 

Leroy42

Top Contributor
DarkwingDuck hat gesagt.:
Ich steh noch ziemlich am Anfang und es tut mir leid wenn ich dumme Fragen stelle, aber ich hoffe ihr helft mir trotzdem :roll:
Dafür ist das Forum samt seiner ehrenamtlichen Mitarbeiter ja da. :D

Dein Code ist noch ein wenig unverständlich. Zum ersten kannst du selbst gar kein
Graphic Objekt erzeugen. Diese werden vom System erzeugt und dir zum Zeichen
in Methoden wie paintComponent zur Verfügung gestellt.

Weiter hat dein erzeugtes g in der Methode run gar keine Verbindung zu irgendeinem
Frame.

Auch versteht ich nicht wieso du 2 Klassen hast, die beide von JFrame erben?
In welches willst du denn zeichnen?

Beschreib doch einfach mal mit eigenen Worten was du eigentlich vorhast,
vielleicht können wir die dann ein entsprechendes Gerüst coden an dem
du dann weiter raufklettern kannst :cool:
 

DarkwingDuck

Mitglied
oh, dass die zweite Klasse von Frame erbt ist noch ein Überbleibsel von einem Experiment. Bitte einfach wegdenken :roll:

Ich erkläre am besten erstmal wie ich zu dieser Frage gekommen bin:
- Ich will 2 animierte Grafiken darstellen, dazu brauche ich 2 Schleifen die alle paar milisekunden ein neues Bild ausgeben
- da die 2 Schleifen dazu ja gleichzeitig laufen müssen brauche ich Threads (oder?)
- Also muss ich in einem Thread ein Bild darstellen. Die einzig mir bekannte Methode das zu tun ist:
Code:
Image[] raupe = new Image[4];

raupe[0] = getToolkit().getImage("raupe0.gif");		
raupe[1] = getToolkit().getImage("raupe1.gif");
raupe[2] = getToolkit().getImage("raupe2.gif");
raupe[3] = getToolkit().getImage("raupe3.gif");

MediaTracker mt = new MediaTracker(this);
mt.addImage(raupe[0], 0);
mt.addImage(raupe[1], 1);
mt.addImage(raupe[2], 2);
mt.addImage(raupe[3], 3);

g.drawImage(raupe[i], 100,100,this); // i ändert sich in einer Schleife ständig
- mein Problem ist jetzt, dass das "g" von "g.drawImage(raupe...." gar nicht existiert :(
Ich kenne das nur von "public void paint(Graphics g)" und da wird doch eine Instanz von Graphics namens g erzeugt oder? Und ich dachte, dass selbe könnte ich mit "Graphics g = new Graphics();" auch tun. Denn es in der run() genauso zu tun wie in der paint() --> also "run(Graphics g)" verbietet mir der Compiler...

Und genau das ist meine Frage: Wie bekomme ich eine Instanz von Graphics in meine run() ?

Wäre super wenn ihr mir da helfen könntet (oder bin ich komplett auf dem Holzweg..? :bahnhof: )

Vielen Dank! :D
 

Leroy42

Top Contributor
DarkwingDuck hat gesagt.:
Und genau das ist meine Frage: Wie bekomme ich eine Instanz von Graphics in meine run() ?

Am besten gar nicht :cool:

Und zwar aus folgendem Grund: Wenn du außerhalb deines Frames in die Instanz von Graphics schreibst,
ist alles was du gezeichnet hast verschwunden wenn dein Frame mal miminiert oder von einem anderen
Frame überdeckt wird.

Aus diesem Grund solltest du am besten nur dem Frame selbst erlaubej etwas zu zeichen und
das was er zeichnen soll auch nur in der paintComponent Methode.

Ein sauberer Ansatz ist, in deiner run-Methode dem Frame über den Aufruf einer Methode einfach
nur mitzuteilen, daß und was er zeichnen soll. Diese Methode vermerkt in seiner Instanz (Instanzvariablen)
was aktuell darzustellen ist und ruft am Ende repaint() auf um widerum den Event-Dispatch-Thread
zu veranlassen die paintComponent-Methode des Frames aufzurufen. Dort und nur dort findet
dann das eigentliche Zeichnen in die sowieso übergebene Graphics-Instanz statt.
 

DarkwingDuck

Mitglied
Zum Verständnis:

Du meinst also, ich soll in meiner run() eine Schleife laufen lassen, die einer Variable ständig ein neues Bild zuweist. Diese Variable übergebe ich an meinen Frame und lasse ihn dort darstellen.
Ist das so richtig?

Nur was ein Event-Dispatch-Thread ist weiß ich nicht. Aber ich denke das kann ich auch googeln
 

Leroy42

Top Contributor
Genau!
Bleibt nur noch die Frage, woher deine Run-Methode das Frame kennt.

Du kannst im Konstruktor der Klasse DrawTo die Frame-Instanz übergeben und in einer
Instanzvariablen speichern.

Oder du verzichtest gleich ganz auf DrawTo, läßt dein Hauptframe das Interface Runnable implementieren
und verlagerst die run-Methode dorthin. Dadurch hat deine run-Methode automatisch zugriff auf
das Frame.
 

DarkwingDuck

Mitglied
Alles klar. Hab ich verstanden glaub ich!

Werd ich heut abend gleich mal ausprobieren

Vielen Dank für deine Hilfe! :D :applaus:
 

byte

Top Contributor
DarkwingDuck hat gesagt.:
- mein Problem ist jetzt, dass das "g" von "g.drawImage(raupe...." gar nicht existiert :(
Ich kenne das nur von "public void paint(Graphics g)" und da wird doch eine Instanz von Graphics namens g erzeugt oder? Und ich dachte, dass selbe könnte ich mit "Graphics g = new Graphics();" auch tun. Denn es in der run() genauso zu tun wie in der paint() --> also "run(Graphics g)" verbietet mir der Compiler...

Ein Blick in die Java API offenbart, dass Graphics abstrakt ist, weshalb Du auch kein Graphics-Objekt erzeugen kannst.
 

DarkwingDuck

Mitglied
Java API hört sieht interessant aus. Muss man sich aber erstmal einarbeiten glaub ich.
Aber Danke für den Tip!

Mein Programm läuft jetzt übrigens so wie es soll.
Danke für die Hilfe! :D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Einfach-Verkettete-Listen Ausgabe zeigt nur 1. und letzte instanz Java Basics - Anfänger-Themen 2
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
H String Repräsentation eines Rechtecks mit Instanz-Methode Java Basics - Anfänger-Themen 8
O Mit Instanz von Oberklasse auf Unterklasse zugreifen Java Basics - Anfänger-Themen 2
O Wie erstelle ich eine Instanz in einer Klasse für die ich die Instanz will? Java Basics - Anfänger-Themen 4
T Auf Instanz der selben Klasse aus überschriebener Methode in Methode zugreifen. Java Basics - Anfänger-Themen 2
T Inhalt aus TextField in Attribut einer Instanz schreiben Java Basics - Anfänger-Themen 5
F Wann ist es eine Instanz und wann nicht? Java Basics - Anfänger-Themen 1
Kirby.exe Generische Objekt Instanz erstellen Java Basics - Anfänger-Themen 14
M Java Instanz-Variablen ? Java Basics - Anfänger-Themen 3
I Instanz einer anderen Klasse zurückgeben Java Basics - Anfänger-Themen 34
G Unterschied Instanz- Klassenvariable Java Basics - Anfänger-Themen 11
F Mehrere Instanzen der Klasse A EINER Instanz der Klasse B übergeben Java Basics - Anfänger-Themen 3
F OOP Instanz einer Klasse an eine andere weitergeben Java Basics - Anfänger-Themen 16
C Instanz einer Klasse während if-Abfrage erzeugen und bei zweiter if-Abfrage wiederverwenden Java Basics - Anfänger-Themen 6
C Group, Actor und Instanz-Zugriff, LibGDX Java Basics - Anfänger-Themen 4
BadBat Klassen instanz als variable + methodenaufruf Java Basics - Anfänger-Themen 4
T Auf Instanz einer Liste zugreifen Java Basics - Anfänger-Themen 2
M Neu instanzierte Klasse übernimmt Werte von anderer Instanz Java Basics - Anfänger-Themen 4
P Instanz mit .add Methode von einer Klasse zur anderen? Java Basics - Anfänger-Themen 6
H Klassen Von Instanzvariablen auf Instanz schließen Java Basics - Anfänger-Themen 21
W Methoden Methode ohne Parameter auf Instanz eines Objekts aufrufen? Java Basics - Anfänger-Themen 14
J Variablen Unterschied zwischen lokalen-, Instanz-, Klassenvariablen Java Basics - Anfänger-Themen 6
T Junit Mockito: Instanz von inneren erzeugten Objekten Java Basics - Anfänger-Themen 4
S Klassen Instanz anderer Klasse raus geben Java Basics - Anfänger-Themen 1
B Klassen Auf Instanz anderer Klasse zugreifen Java Basics - Anfänger-Themen 1
U JavaFX eine Vbox Instanz pro Pane? Java Basics - Anfänger-Themen 2
D Instanz einer Subklasse anhand deren Superklasse Java Basics - Anfänger-Themen 5
K Zugriff auf Variabeln Wert einer Instanz Java Basics - Anfänger-Themen 4
O OOP Methoden bei erstellen einer Instanz und mehr Java Basics - Anfänger-Themen 4
S Methoden eine Instanz einer eigenen Klasse als parameter übergeben Java Basics - Anfänger-Themen 9
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
E Von Instanz des Dialogs auf das Frame zugreifen Java Basics - Anfänger-Themen 8
kaoZ Android Programmierung / Erstellen einer neuen Instanz Java Basics - Anfänger-Themen 2
B Variablen Instanz von Enum zur Laufzeit erstellen und zuweisen Java Basics - Anfänger-Themen 2
G Undefined Instanz/Konstruktoraufruf Java Basics - Anfänger-Themen 8
S Ein Attribut/Instanz eines bestehendes Objektes mit SETTER Methode ändern Java Basics - Anfänger-Themen 3
M Initialisierungsblock beim Erzeugen einer Instanz Java Basics - Anfänger-Themen 6
J Instanz durch String Java Basics - Anfänger-Themen 8
U final Instanz Java Basics - Anfänger-Themen 11
C Klassen Zugriff auf Instanz einer anderen Klasse Java Basics - Anfänger-Themen 9
F Array als Instanz einer Klasse Java Basics - Anfänger-Themen 8
P Klassen Instanz einer Klasse in ihrer eigenen Definition erzeugen? möglich? Java Basics - Anfänger-Themen 4
O Erste Schritte Klassenname zurückgeben, keine instanz Java Basics - Anfänger-Themen 23
0 Log4J Instanz erzeugen Java Basics - Anfänger-Themen 2
K Methoden Zustand innerhalb einer Instanz ändern Java Basics - Anfänger-Themen 2
B Geerbte Instanz kann keine void Methode ausführen?! Java Basics - Anfänger-Themen 15
pindakaas Instanz einer Klasse in einer anderen erzeugen Java Basics - Anfänger-Themen 6
L Instanz Problem Java Basics - Anfänger-Themen 4
E ActionListener erkennt instanz nicht Java Basics - Anfänger-Themen 9
M JRadioButton keine Instanz von ButtonModel Java Basics - Anfänger-Themen 10
B Daten in Instanz einer Klasse ändern / abfragen Java Basics - Anfänger-Themen 12
A Instanz einer Klasse Java Basics - Anfänger-Themen 2
S Instanz(en) einer Singleton-Klasse Java Basics - Anfänger-Themen 11
S OOP Warum gleiche Instanz der Klasse? (Factory-Muster) Java Basics - Anfänger-Themen 13
O zugriff auf eine Instanz Java Basics - Anfänger-Themen 8
U Instanz aufrufen Java Basics - Anfänger-Themen 3
A Stilfrage: statische Variable mit Instanz der gleichen Klasse Java Basics - Anfänger-Themen 8
Antoras eine Instanz von mehrere Klassen aus nutzen Java Basics - Anfänger-Themen 2
D Wie neue Instanz einer Klasse erstellen, von der ich nur eine andere Instanz kenne? Java Basics - Anfänger-Themen 13
D Servlet kann nicht auf Instanz zugreifen Java Basics - Anfänger-Themen 10
G neue Instanz von ArrayList Java Basics - Anfänger-Themen 5
G Name der Instanz einer Klasse. Java Basics - Anfänger-Themen 2
W IE Instanz öffnen / Ausführbare Datei öffnen Java Basics - Anfänger-Themen 2
G Was passiert mit eine Methode bei einer Instanz Java Basics - Anfänger-Themen 13
D vererbung, kinder einer instanz. Java Basics - Anfänger-Themen 25
D Bei Event soll Instanz sich selbst löschen Java Basics - Anfänger-Themen 4
G Vererbung mit einer Instanz aus der Superklasse Java Basics - Anfänger-Themen 2
J Generics Probleme mit instanz von T Java Basics - Anfänger-Themen 4
H OO-Anfänger: mehrere Klassen greifen auf eine Instanz zu Java Basics - Anfänger-Themen 9
H instanz von Button wird nicht erkannt! Java Basics - Anfänger-Themen 6
P Instanz mit allen Attributen ausgeben Java Basics - Anfänger-Themen 3
B Sortieren von Objekt Arrays nach einer Instanz Java Basics - Anfänger-Themen 8
E Eine Klasse hat eine Instanz von sich selbst. Java Basics - Anfänger-Themen 6
W zugriff auf jframe klasse und deren instanz geht nicht? Java Basics - Anfänger-Themen 11
G Instanz-Rückgabewerte abspeichern Java Basics - Anfänger-Themen 2
F Socket Instanz auf Klasse welche von Socket erbt zuweisen Java Basics - Anfänger-Themen 3
I In Instanz ausgeben wer sie erzeugt hat Java Basics - Anfänger-Themen 2
F nur 1 Instanz 1 Klasse --> static? Java Basics - Anfänger-Themen 10
P Instanz kann nicht erstellt werden. Java Basics - Anfänger-Themen 2
M Von Instanz auf instanzierende Klasse zugreifen Java Basics - Anfänger-Themen 5
S paintComponent, neue Instanz überschreibt wohl alte Instanz Java Basics - Anfänger-Themen 6
J generische klassen neue Instanz Java Basics - Anfänger-Themen 5
D Instanz einer Klasse in einer anderen klasse erzeugen Java Basics - Anfänger-Themen 3
P Zugriff auf Instanz in der anderen Klasse geht nicht! Java Basics - Anfänger-Themen 4
N Objekt seine eigene Instanz löschen lassen? Java Basics - Anfänger-Themen 7
S will instanz einer Klasse erzeugen - mach irgendwas falsch Java Basics - Anfänger-Themen 6
T neue Instanz von JFileChooser => applikation friert ein Java Basics - Anfänger-Themen 2
D Unterschied zwischen Referenz auf Objekt/Instanz von Objekt Java Basics - Anfänger-Themen 9
F Prüfen, ob Instanz existiert Java Basics - Anfänger-Themen 14
J Brett vorm Kopf - Klasse aufrufen/instanz *?* Java Basics - Anfänger-Themen 11
M Methoden oder Instanz statisch? Java Basics - Anfänger-Themen 7
P Instanz in einer Variable speichern ? Java Basics - Anfänger-Themen 4
H Instanz einer Klasse übergeben und dynamisch auswerten Java Basics - Anfänger-Themen 3
H eindeutige Instanz erzeugen Java Basics - Anfänger-Themen 4
M HILFE JPanel - Graphics Java Basics - Anfänger-Themen 1
H Eingabe tätigen bevor Graphics g Fenster öffnet Java Basics - Anfänger-Themen 5
I Java Klassen "Graphics" und "MouseEvent" kombinieren Java Basics - Anfänger-Themen 7
CptK Interface Bilder mit Graphics g zeichnen Java Basics - Anfänger-Themen 7
J Erste Schritte drawLine Methode der Graphics Klasse Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben