Was ist Graphics g wirklich?

Status
Nicht offen für weitere Antworten.

Frunobulax

Mitglied
Hallo,

also ich programmiere meine Programme gerne der Reihe nach, auch mit Funktionen, usw...
Die meisten Programmiersprachen machen das auch mit.
Um so eine Reise durch die Mandelbrotmenge ins Internet zu stellen hätte ich gerne
JavaScript genommen. Das geht zwar, ist aber langsam und man sieht das Ergebnis
erst am Ende der Rechnung.

Dann habe ich mir dann das erstbeste einfache Applet kopiert (Das hat Kreise gezeichnet)
Es enthält nur :

init(){}

und

public void paint(Graphics g){}

Ich habe dann meinen ganzen Kram in paint hereingeknallt.
Paint startet automatisch (Warum eigentlich? Und woher bekommt es g) und zeichnet die Mandelbrot Menge.
Prima.

Jetzt kommt der zweite Schritt.

Mit paint2() markiere ich Ausschnitte aus dem Bild von paint().

paint2() steht auch in der gleichen Klasse.

paint2() rufe ich vom Mouselistener aus auf, aus der selben Klasse.
Code:
  public void mouseDragged(MouseEvent me)
    {
   g=super.getGraphics();     
  ...
   paint2(g);
    }
Da mir Graphics g dort fehlt hole ich mir g
mit g=super.getgraphics() , das hat mir netbeans vorgeschlagen auf meiner Suche nach so einer
Art globalen g und ich dachte super würde vielleicht was bringen. g=getgraphics() geht wahrscheinlich
auch.
Es geht auch, ich markiere dann mit paint2() Ausschnitte aus paint().

Wenn ich dann die neuen Koordinaten für den Ausschnitt habe rufe ich
paint(g) , auch vom mouselistener aus auf, wieder mit g=super.getgraphics() und anderen "globalen" Parametern/Variablen
aus meiner Klasse, um einen Ausschnitt aus der Menge zu zeichnen.

Das geht so halb. Mit Bedienungstricks, die ich zufällig gefunden habe kannn ich in die Menge eindringen, bis die
Rechengenauigkeit des Rechners versagt.

Aber ältere Rechtecke aus der Markierung mit paint2() tauchen immer wieder mal auf und es funktioniert nicht
Bedienungsfreundlich.

Drum weiß ich nicht was ich für gs ich da verwende.

Ich hätte gerne nach der Markierung ein völlig neues Graphics g (So wie beim Start des Applets)
Alle gs die ich vorher verwendet habe würde ich gerne löschen und paint2 mit einem g aufrufen,
das besser paßt auf das neue g mit dem paint vorher aufgerufen wurde.

Aber woher bekomme ich das g uns wie lösche ich alle anderen gs die da noch rumschwirren?

Danke für eine Hilfe, die mir die Javalogik wohl etwas näher bringt.

Thomas
 

Frunobulax

Mitglied
Ich habe schon zwei Führerscheine, daher kann ich auch etwas Englisch. Die deutsche Fahrlehrerin hatte glücklicherweise auch eine Bremse.
Mein erstes Auto hatte auffällig viele Beulen, kaum von Zusammenstößen, aber Straßenbegrenzungen sind eben nur Vorschläge. Hindernisse stehen zufällig gerade hier oder da,...; )
It is not recommended that programs invoke paint() directly.
Das ist mir aufgefallen.
repaint() stand schon zufällig in den kopierten mouselistener Anweisungen. Ich hatte es falsch interpretiert.
Hatte eher nach sowas wie "destroy g" oder "java grafik löschen" gegoogelt. g=null hatte auch nicht den gewünschten Effekt.
 
J

java2000

Gast
http://www.java-forum.org/de/viewtopic.php?t=46550&start=0

Hier gibt es ein Tutorial von Wildcard über das Thema "Zeichnen mit Swing". Es scheint noch in Arbeit zu sein, der Inhalt stimmt aber trozdem. Im Thread findest du zwei grosse Beiträge, der zweite ist die Korrektur des ersten, also liess am besten den zweiten grösseren Beitrag auf Seite 1. Dort wird klar zwischen dem falschen Ansatz mit der Verwendung von getGraphics und dem richtigen Ansatz mit dem überschreiben von paintComponent unterschieden.

Kurz zusammengefasst:
Wenn eine Komponente neu gezeichnet werden soll, wird repaint() aufgerufen. Diese übergibt dann dieses ominöse Graphics g an paint(g), welches paintComonent(g) (für den Inhalt der Komponente), paintChildren(g) (Für die Komponenten innerhalb), paintBorder(g) (Für den Rand) aufruft.
Jede Komponente zeichnet sich selbst und die Komponenten innerhalb auf das Graphics g und dieses g wird am Schluss auf den Bildschirm gemalt (etwas einfach formuliert).
 

Schandro

Top Contributor
Oh mein Gott, warum willst du Graphic zerstören? ^^
Normalerweise malt man NUR in der paint-Methode, die vom JFrame/JApplet/ wasauchimmerdunimmst automatisch mit nem Object von Graphics aufgerufen wird. Selber sich ein Graphics Object besorgen mit getGraphics oder so ist seeehr schlecht. Wenn du nicht alle deine Malschritte in paint schreiben willst, kannst du ja ohne Probleme sowas machen:

Code:
public void paint(Graphics g){
   for(int i=0;i<6;++i){
      malWasBestimmtes(g,50,i*20);
   }
}

private void malWasBestimmtes(Graphics g, int x, int y){
   g.drawOval(x,y,55,42);
}

Jedes mal, wenn du im Programmablauf was am gemalten ändern willst, ist die einzige Möglichkeit dazu: repaint() aufzurufen und in der paint()- Methode irgendwie mit Membervariablen der Klasse arbeiten, um zu entscheiden was jetzt anders gemalt werden soll. der repaint und damit paint Methode kann man leider nicht direkt Parameter mitgeben.
 

Frunobulax

Mitglied
Ja, meine ich ja. Ich hatte nach dem Hinweis von Ebenius beschlossen paint2() sooderso in paint reinzustellen und dann repaint() zu verwenden. Deswegen heißt paint auch immer paint in den bisher gefundenen Beispielen. Wenn mir mal ein nützliches Beispiel für selbstbeschaffte gs einfällt schreibe ich es.
Sorry auch, hab den Hang Zerstörung zu beabsichtigen geerbt,
Eröffne jetzt 'nen neuen Thread: Laufende Dezimalzahlen zu RGB Spektrum.

_________________________________________________________________________________________________________________

PS: Es funktioniert jetzt, allerdings nicht ohne g=getgraphics(), wg. der Markierung.

Steht unter http://www.emotiongenerator.com/neogrid

Einfach immer möglichst ein Quadrat zur Auswahl zeichnen, die Maustaste loslassen, dann erscheint der vergrößerte Ausschnitt.

Danke an alle.

Grüße,

Thomas
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
J GUI / Graphics Java Basics - Anfänger-Themen 2
H Graphics / repaint Java Basics - Anfänger-Themen 8
K Zwei Fragen zu Graphics/Graphics2D Java Basics - Anfänger-Themen 5
R Cast java.awt.Graphics Java Basics - Anfänger-Themen 7
Azazel (Anfängerhilfe) awt.Graphics Schwierigkeiten Java Basics - Anfänger-Themen 6
I Methoden public void paintComponent (Graphics g) Java Basics - Anfänger-Themen 4
B Erste Schritte Anzeige von Graphics Objekten einzeln aktualisieren Java Basics - Anfänger-Themen 1
S Farbige Lebensleiste mit Graphics? Java Basics - Anfänger-Themen 10
S Ein Graphics Obejct mehrmals mit denselben Eigenschaften zeichnen lassen?!?!? Java Basics - Anfänger-Themen 4
S G Graphics Java Basics - Anfänger-Themen 1
thet1983 g.Graphics löschen? Java Basics - Anfänger-Themen 1
M Probleme mit paint() aus java.awt.Graphics Java Basics - Anfänger-Themen 2
A EAN13 Font auf graphics g erzeugt Monospaces Java Basics - Anfänger-Themen 14
N Graphics to png Java Basics - Anfänger-Themen 10
N Methode draw(Graphics g) aufrufen Java Basics - Anfänger-Themen 6
Dogge Problem mit paint(Graphics g) im Applet Java Basics - Anfänger-Themen 13
J Problem mit paint(Graphics g) Java Basics - Anfänger-Themen 4
J Jtable änderung soll graphics aktualisieren Java Basics - Anfänger-Themen 4
J JAVA Graphics Java Basics - Anfänger-Themen 5
A Graphics Objekt verhält sich merkwürdig Java Basics - Anfänger-Themen 2
G DRUCKEN von z.B. eines JFrame über print(Graphics g) Java Basics - Anfänger-Themen 9
Maxim6394 Probleme mit Graphics Java Basics - Anfänger-Themen 7
W von Graphics in BufferedImage Java Basics - Anfänger-Themen 10
M OOP Graphics immer selbstbezihend Java Basics - Anfänger-Themen 12
K Problem mit Parameter von paint(Graphics g) Java Basics - Anfänger-Themen 3
T Transparente Bilder mit Graphics zeichnen Java Basics - Anfänger-Themen 17
H Probleme mit Graphics G Java Basics - Anfänger-Themen 2
M Schiebepuzzle: MouseListener und Graphics? Java Basics - Anfänger-Themen 6
J Graphics g Java Basics - Anfänger-Themen 4
H Probleme mit Graphics Java Basics - Anfänger-Themen 5
B MouseListener & Graphics Java Basics - Anfänger-Themen 10
M Graphics zeichnen Java Basics - Anfänger-Themen 2
F Graphics PDFBox Java Basics - Anfänger-Themen 9
M kurze Frage zu Graphics Java Basics - Anfänger-Themen 5
Luk10 Buch für Swing/Awt/Graphics Java Basics - Anfänger-Themen 4
M Java Graphics etc. Java Basics - Anfänger-Themen 2
M Concurrency und Graphics Java Basics - Anfänger-Themen 9
J Klasse Graphics Nullpointerexception Java Basics - Anfänger-Themen 8
P Frage zu Graphics Java Basics - Anfänger-Themen 2
O graphics methode zeigt mein bild nicht an Java Basics - Anfänger-Themen 7
F Zweite Graphics-Methode wird nicht ausgeführt Java Basics - Anfänger-Themen 4
T rotes herz public void paint(Graphics g) Java Basics - Anfänger-Themen 2
G paintComponent(Graphics g) Java Basics - Anfänger-Themen 2
eQui Oberfläche mit Graphics zeichnen Java Basics - Anfänger-Themen 11
S Dicke bei Graphics Ovject einstellen Java Basics - Anfänger-Themen 2
V KSKB zum Verständnis von Graphics und paintComponent Java Basics - Anfänger-Themen 6
G mit Graphics erzeugte Strings verschwinden sofort wieder Java Basics - Anfänger-Themen 7
T Graphics von java.awt.Frame soll sich inhalt merken Java Basics - Anfänger-Themen 3
G Graphics-Object skalieren Java Basics - Anfänger-Themen 9
G Constructor & Graphics g Java Basics - Anfänger-Themen 5
F Frage zum Graphics Objekt Java Basics - Anfänger-Themen 3
D Instanz von Graphics in run() Java Basics - Anfänger-Themen 8
B Mouseevents und Graphics Java Basics - Anfänger-Themen 11
D Abstrakte Klasse Graphics Java Basics - Anfänger-Themen 3
W Verständisfrage zu Graphics Objekt Java Basics - Anfänger-Themen 3
P umwandeln von graphics nach image Java Basics - Anfänger-Themen 4
A Graphics g, AdjustmentEvent e Java Basics - Anfänger-Themen 5
Dilandau paint(Graphics g) { unbekannt in try{} / catch{} }? Java Basics - Anfänger-Themen 5
S Graphics Java Basics - Anfänger-Themen 11
J Ist es möglich einen int Array wirklich leer zu initialisieren oder zu füllen? Java Basics - Anfänger-Themen 21
M Methoden Fehler und finde die Lösung nicht wirklich Java Basics - Anfänger-Themen 6
J Haben Chars wirklich keine KeyCodes? Java Basics - Anfänger-Themen 12
B Schlüsselworte this - immer oder nur wenn wirklich notwendig? Java Basics - Anfänger-Themen 9
T TCP, Empfang nur wenn wirklich etwas kommt Java Basics - Anfänger-Themen 6
L Hashtable nicht wirklich geeignet für mein Vorhaben? Java Basics - Anfänger-Themen 3
D ist das wirklich ein fehler? Java Basics - Anfänger-Themen 6
-horn- Runden auf x-Stellen wirklich nur so umständlich? Java Basics - Anfänger-Themen 9
M wait() sleep() geht nicht wirklich Java Basics - Anfänger-Themen 3
G Interfaces - Müssen wirklich alle Methoden implement. werden Java Basics - Anfänger-Themen 8
T Java wirklich gut zum programmieren lernen? Java Basics - Anfänger-Themen 43
L Zum neuzeichnen wirklich zwingen Java Basics - Anfänger-Themen 4
ven000m Java - wirklich open Source? Java Basics - Anfänger-Themen 2
A Java wirklich das richtige? Java Basics - Anfänger-Themen 20
M Einen Vector wirklich kopieren WIE GEHT DAS ??? Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben