# Zeichnen mit Swing



## GallagherBrother (7. Sep 2003)

Hi, wie bekomme ich es hin, dass ich in einem Fenster sowohl JButtons, JTextAreas etc UND Linien, Rechtecke etc unterbringen kann? Immer wenn ich das mache wird eines von beiden überschrieben, so dass z.B. nur die mit g.drawLine() gezeichnete Linie sichtbar ist. Warum verschwindet der Rest und was schafft hier Abhilfe?

Danke im Voraus an alle die sich die Mühe machen mir zu helfen,

Grüße

Sebastian


----------



## seppelina (8. Sep 2003)

Standardmäßig kann man auf einem JFrame meines Wissens nach entweder zeichnen ODER Komponenten hinzufügen.

Daher würde ich zum Zeichnen eine von Canvas abgeleitete Klasse erstellen, dort die Zeichnungen machen (Linien, Rechtecke, usw.) und dann ein Objekt dieser Klasse dem JFrame (bzw. dessen ContentPane) hinzufügen. Die restlichen Komponenten wie JButton usw. kannst du direkt dem JFrame (bzw. dessen ContentPane) hinzufügen.

Hoffe, es hilft.


----------



## Nobody (8. Sep 2003)

versuch mal die dinge neu zeichnen zu lassen, bei mir hat es funktioniert. jedoch musst du aufpassen, dass die objekte nicht übereinander sein dürfen


----------



## DTR (8. Sep 2003)

In AWT brauchst du Canvas zum Zeichen. Unter Swing lässt sich alles als Zeichenfläche verwenden. Zum Zeichnen musst du nur die Methode paint() bzw. paintComponents() überschreiben. Du solltest dabei aber nicht den aufruf der Ursprünglichen paint() Methode vergessen. Denn die Komponenten werden in der ursprünglichen paint() Methode gezeichent und wenn du diese komplett überschreibst, können sie nicht gezeichnet werden und erscheinen folglich auch nicht. 

Also kurz: Du musst super.paint() in deiner paint() Methode aufrufen, am besten als ersten befehl.


----------



## Kriz (18. Sep 2003)

Mein Vorschlag wäre:

Fall #1 - Zeichnungen sollen Komponenten überlagern:

Direkt paint() überlagern und vorher aber super.paint() aufrufen.

Nachteil: Menüs werden auch hinter den Zeichnungen angezeigt.

Fall #2 - Komponenten sollen Zeichnungen überlagern:

Eine eigene Klasse von bspw. JPanel ableiten. Dort die Methode paintComponent(Graphics g) überladen und Zeichnungsmethoden dort einfügen. Danach die eigene Klasse als Komponente in die ContentPane adden.

Jetzt werden Menüs auch nicht mehr von der Zeichnung übermalt.


----------



## jptc.org (19. Sep 2003)

Schaut die mal die Posts

http://www.java-forum.net/viewtopic.php?t=274

an. Dort geht es um ein ähnliches Thema (ob Bilder oder Linien gezeichnet werden, ist so ziemlich egal). Es gibt doch auch gute Beispiele!

Karsten Voigt
http://www.java-performance-portal.org


----------

