(Anfängerhilfe) awt.Graphics Schwierigkeiten

Azazel

Mitglied
Moin,

Ich wage mich jetzt endlich an das Java Komponent JPanel und möchte darauf etwas zeichnen.
Da JPanel Objekte keine Methoden zur Graphischen darstellung besitzen, muss ich mit der Graphics Klasse arbeiten(habe ich so verstanden).
Die Graphics Klasse ist aber abstract und ich kann kein Objekt davon erzeugen und es besitzt keine Methoden zum Zeichnen richtig?
Ich weis auch nicht, welche Klassen von Graphics erben :(

So habe ich mal angefangen:
Java:
public class Startklasse{
   
    public static void main(String[] args){
       
    new Fenster();
    }
}
Java:
import javax.swing.JFrame;

public class Fenster extends JFrame{
    private static final long serialVersionUID = 1l;

    public static final int WIDTH = 300, HEIGHT = 400;
   
    public Fenster(){
       
        setSize(WIDTH, HEIGHT);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        add(new Leinwand());
       
        setVisible(true);
    }
}
Java:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

public class Leinwand extends JPanel {
private static final long serialVersionUID = 1L;

    public Leinwand(){
        paintX();
       
    }
   
    void paintX(){
        Graphics g = this.getGraphics();
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, 100, 100);
       
    }
}
Leider bekomme ich da gleich mehrere Fehlermeldungen, welche das sind solltet ihr hoffentlich wissen.

Kann mir jemand auf einfache Weise erklären, wie das System mit den Zeichnen auf einen JPanel funktioniert?

Danke
 

X5-599

Top Contributor
Um in einer JComponent Klasse zeichnen zu können muss man dessen paintComponent Methode überschreiben. Diese wird vom Framework aufgerufen und bringt gleich das korrekte Graphics Objekt mit:
Code:
@Override
protected void paintComponent(Graphics g)
{
	g.drawXXX(); //drawString() drawOval() etc
}

Hinweis: So wird nichts gezeichnet außer dem was man selbst programmiert. Wenn man eine Komponente nur mit zustätzlichen Sachen verschönern will, muss man als erstes
super.paintComponent(g); aufrufen bevor man die eigenen Zeichnen Anweisungen gibt.

Code:
@Override
protected void paintComponent(Graphics g)
{
	super.paintComponent(g);
	g.drawXXX(); //drawString() drawOval() etc
}
 

Azazel

Mitglied
Danke X5-599,
Aber 2 Fragen habe ich noch,

1. Wieso wird bei mir die paintComponent() Methode aufgerufen, obwohl ich das im Leinwand Konstruktor nicht eingegeben habe? Ich müsste im Konstruktor Theoretisch noch: paintComponent(); ergänzen.

2. Wieso muss ich diese Methode auf Protected Kapseln, reicht es nicht, wenn ich es auf default setze ?
 

X5-599

Top Contributor
Man muss (und sollte wohl auch) die paintComponent Methode nicht selbst aufrufen, weil das vom Swing Framework erledigt wird. Indem man diese Methode überschreibt greift man quasi in den Zeichen Prozess ein. Pure Vererbungslogik. Das Framework will bei allen seinen Objekten diese Methode aufrufen damit sie sich zeichnen. Jede Klasse (JPanel, JButton, JFrame etc) hat seine eigene Vorstellung davon wie sie gezeichnet werden soll. d.h. die paintComponent Methode sieht in jeder dieser Klassen unterschiedlich aus.

Habe ich nun eine Klasse die von einer dieser Klassen erbt, wird sie erstmal so aussehen wie diese. Überschreibe ich allerdings die paintComponent Methode und lasse sie z.B. leer. Dann ruft das Framework bei meiner neuen Klasse ebenfalls diese Methode auf. Da sie aber leer ist gibt es dementsprechend nichts zu zeichnen. Meine Klasse würde in einer GUI also nicht dargestellt. Das Framework kann die Komponente auch nicht so zeichnen wie ursprünglich definiert (in den paintComponent Methode der Oberklasse), weil dafür eine explizite Anweisung fehlt. Das ist der Aufruf: super.paintComponent.

Das protected kommt daher, dass diese Methode nunmal so in der JComponent Klasse (Die Oberklasse für sowas wie JPanel, JButton etc) definiert ist. Man darf diese Sichtbarbeit erweitern, aber nicht verringern. Du könntest zb auch
Code:
@Override
public void paintComonent(Graphics g)
schreiben.
Code:
@Override
private void paintComponent(Graphics g)
void paintComponent(Graphics g)
hingegen ginge nicht.

Es macht allerdings nicht viel Sinn public statt protected zu schreiben, da man ja diese paintComponent Methode nicht selbst aufruft. Ob man nun public oder protected schreibt muss jeder selber wissen. Ich bin mir sicher schon beides in freier Wildbahn gesehen zu haben.
Persönlich änder ich die Sichtbarkeit von überschriebenen Methoden nicht. Es könnte Sinn machen bei Methoden, die man auch selbst aufruft aber ich habe es bisher noch nie machen müssen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Datentypen Anfängerhilfe Java Basics - Anfänger-Themen 6
S Anfängerhilfe Java Basics - Anfänger-Themen 2
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
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
F Was ist Graphics g wirklich? Java Basics - Anfänger-Themen 5
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
Nerdinfekt Programmieranfänger, Schwierigkeiten mit der Programmierung Java Basics - Anfänger-Themen 6
S Schwierigkeiten beim Aufrücken von Arrays Java Basics - Anfänger-Themen 10
C Hilfe - Kleines Programm macht mir Schwierigkeiten Java Basics - Anfänger-Themen 2
T OOP Schwierigkeiten mit OOP Java Basics - Anfänger-Themen 2
O Starte Timer, während anderer Timer noch läuft. Ruft dies Schwierigkeiten hervor? Java Basics - Anfänger-Themen 0
I Schwierigkeiten bei Ausgabe von KreisObjekten in Array Java Basics - Anfänger-Themen 4
D Schwierigkeiten bei Stein.Schere.Papier-Aufgabe Java Basics - Anfänger-Themen 9
N JDK installieren kompilier schwierigkeiten Java Basics - Anfänger-Themen 6
hdi Schwierigkeiten mit Fullscreen API Java Basics - Anfänger-Themen 3
S grundlegende schwierigkeiten Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben