paintComponent() in abstrakter und vererbender Klasse

Status
Nicht offen für weitere Antworten.

monade

Mitglied
Hi,

ich muss in Java gerade eine ganze Reihe verschiedener Diagramme zeichnen. Zwar sind die verschiedenen Plots natürlich inhaltlich verschieden, aber Koordinatensystem, Achsen, Labels etc. haben große Gemeinsamkeiten. Deswegen dachte ich mir, dass ich das Grundgerüst doch in einer Art AbstractDiagram-Klasse zeichnen, und dann in den erbenden Klassen den letztenlichen Plot "drüber"zeichnen kann (die abstrakte Klasse erweitert JComponent). Wenn ich das mach wird leider nur (vermutlich nicht überraschend) die "konkrete Klasse gezeichnet". Ist es prinzipiell nicht möglich mit paintComponent in abstrakter UND konkreter Klasse zu zeichnen? Oder gibts da nen Trick? Oder verwendet man für das leere Koordinatensystem besser eine weitere konkrete Klasse?

dankbar für Hilfe,
monade

ps: nochmal zur Vorstellung:

Code:
abstract public class AbstractDiagram extends JComponent(){

...

public void paintComponent(){
//plot empty coordinate system
}

...

}

und

Code:
public class ConcretDiagram extends AbstractDiagram(){

...

public void paintComponent(){
//plot graph
}

...

}
 

tfa

Top Contributor
Du rufst in der Unterklasse ganz einfach super.paintComponent() auf.

Das Koordinatensystem von einer eigenen Klasse zeichnen zu lassen, ist aber auch eine gute Idee. So kannst Du verschiedene Systeme anbieten (lineare, logarithmische, linearlogarithmische, etc.). Natürlich nur, wenn Du sowas brauchst.
 

Marco13

Top Contributor
Dass das 'Graphics g' beim paintComponent fehlt war wohl nur ein Tippfehler?

Mit super.paintComponent(g) kann man das lösen. Etwas problematisch finde ich dabei ggf., wenn die überschreibende Klasse diese Methode aufrufen MUSS, damit es richtig funktioniert. Die Alternative (die nicht 'besser' sein muss, die man aber auf jeden Fall in Erwägung gezogen haben sollte!) wäre, eine Methode implementieren zu lassen, die unabhängig von dem ist, was immer gemacht werden muss
Code:
class Abstract extends JComponent
{
    public void paintComponent(Graphics g)
    {
         paintWhatAlwaysIsPainted(g);
         paintImplementation(g);
    }

    private void paintWhatAlwaysIsPainted(Graphics g) { .... }

    public abstract paintImplementation(Graphics g);
}

class Concrete extends Abstract
{
    public paintImplementation(Graphics g) { ... }
}

So wird das, was gemacht werden MUSS, wirklich IMMER gemacht, und die 'Concrete' Klasse kann in der paintImplementation(Graphics g) dann noch das machen, was zusätzlich gemacht werden soll.
 

monade

Mitglied
Danke euch beiden! Ich habs jetzt mal tatsächlich so ähnlich gelöst wie du, Marco.. und mehr über abstrakte Klassen gelernt, als ihr erahnen könnt :).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Probleme mit paintComponent Java Basics - Anfänger-Themen 13
F Java GUI-PaintComponent funktioniert nicht Java Basics - Anfänger-Themen 1
H Programmaufbau in Ordnung? Problem mit paintComponent() Java Basics - Anfänger-Themen 10
I Methoden public void paintComponent (Graphics g) Java Basics - Anfänger-Themen 4
S Rectangles ausserhalb der paintComponent drawen! Java Basics - Anfänger-Themen 9
M Problem mit paintComponent Java Basics - Anfänger-Themen 6
M PaintComponent Java Basics - Anfänger-Themen 9
J Wer oder was ruft die "paintComponent()" Methode auf? Java Basics - Anfänger-Themen 19
K paintComponent Java Basics - Anfänger-Themen 23
K paintComponent Java Basics - Anfänger-Themen 9
G paintComponent wird nicht ausgeführt Java Basics - Anfänger-Themen 4
kulturfenster paintComponent wird nicht aufgerufen Java Basics - Anfänger-Themen 16
kulturfenster Frage bez paintComponent Java Basics - Anfänger-Themen 5
kulturfenster super.paintComponent(g); Java Basics - Anfänger-Themen 3
G fehler bei paintComponent Java Basics - Anfänger-Themen 6
kulturfenster paintComponent und Timer Java Basics - Anfänger-Themen 2
W Weitere Parameter in die paintComponent()-Methode übergeben? Java Basics - Anfänger-Themen 7
ElViZ paintComponent in den Vordergrund? Java Basics - Anfänger-Themen 2
F paintComponent mit repaint() aufrufen Java Basics - Anfänger-Themen 27
G paintComponent(Graphics g) Java Basics - Anfänger-Themen 2
V KSKB zum Verständnis von Graphics und paintComponent Java Basics - Anfänger-Themen 6
G paintComponent neu zeichnen Java Basics - Anfänger-Themen 5
S paintComponent, neue Instanz überschreibt wohl alte Instanz Java Basics - Anfänger-Themen 6
G Exception in PaintComponent Java Basics - Anfänger-Themen 2
U BufferedImage anzeigen, imageIcon oder paintComponent(); Java Basics - Anfänger-Themen 6
G probleme mit paintComponent Java Basics - Anfänger-Themen 14
M Probleme mit JPanel und paintComponent Java Basics - Anfänger-Themen 3
S getter, setter in abstrakter Klasse oder lieber Unterklassen Java Basics - Anfänger-Themen 4
E Interface nur von abstrakter Klasse implementierbar?! Java Basics - Anfänger-Themen 1
V Instanziierung abstrakter Klassen Java Basics - Anfänger-Themen 4
D Spezifikation abstrakter Datentypen Java Basics - Anfänger-Themen 3
G Vererbung Klasse erbt von abstrakter Klasse implementiert Interface Java Basics - Anfänger-Themen 2
K Frage zu abstrakter Klasse Java Basics - Anfänger-Themen 14
E Abstrakter Methode einen Wert übergeben Java Basics - Anfänger-Themen 2
K Vererbung equals-Methode bei Vererbung abstrakter Klassen Java Basics - Anfänger-Themen 8
M Methode mit beliebigen Parametern in abstrakter Klasse definieren Java Basics - Anfänger-Themen 8
D Datentypen Abstrakter Datentyp lässt sich nicht casten Java Basics - Anfänger-Themen 7
StupidAttack Abstrakte Methoden in nicht-abstrakter Methode in abstrakter Klasse Java Basics - Anfänger-Themen 6
A Super-Anweisung in abstrakter Klasse Java Basics - Anfänger-Themen 12
G Verwirrung bei abstrakter Klasse/Methode Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben