Swing Zeichenprogramm, grundlegende Fragen

Q-Dog

Mitglied
Guten Morgen,

ich möchte demnächst ein kleines Zeichenprogramm in Java mit Swing entwerfen. Man soll verschiedene Objekte zeichnen, diese mit der Maus auswählen, verschieben und auch bei Bedarf entfernen können.

Dazu hätte ich zwei grundlegende Frage:
1.
Sollte ich alle Objekte auf ein und dasselbe Panel zeichnen oder ist es möglich verschiedene Panels o.ä. zu verwenden, welche dann überlagert werden, so dann man später auch Objekte eine Ebene höher verschieben kann.
Wenn ja, wie ist das mit Java möglich?


2.
Wie verwaltet man die Objekte am geschicktesten?
Ich hätte eine LinkedList<Shape> o.ä. verwendet und dann z.B. bei Mausklick geprüft (mit contains() glaub ich?) ob ein Objekt dieser Liste unter der Maus liegt, so dass ich dieses dann bearbeiten (verschieben, löschen) kann.


Gruß Q-Dog
 
ich würde schon alles auf ein und das selbe Panel zeichnen. und die Sichtbarkeit der Objecte einfach selbst verwalten. du könntest ja z.B einfach mehrere BufferedImages als ebenen verwenden.


zu Punkt zwei eine Liste mit Shape ist keine schlechte Idee ob nun eine ArrayList oder eine LinkedList besser ist kann ich dir nicht sagen.
 
ich würde schon alles auf ein und das selbe Panel zeichnen. und die Sichtbarkeit der Objecte einfach selbst verwalten. du könntest ja z.B einfach mehrere BufferedImages als ebenen verwenden.

Danke für deine Antwort AmunRa 🙂

Also wenn ich das richtig verstanden habe, besitze ich ein Panel, auf dem ich mehrere BufferedImages habe (welche meine Ebenen darstellen) und die ich dem Panel hinzufüge ?!
Zeichne ich dann die Objekte direkt auf dem BufferedImages?
Und wie bekomme ich es dann hin, dass die BufferedImages sich überlagern?


Gruß Q-Dog
 
du überschreibst deine paintComponent methode in der du die BufferedImages zeichnest.

Java:
public void paintComponent(Graphics g){
   g.drawImage(img1,0,0,this);
   g.drawImage(img2,0,0,this);

   //usw.

}

und auf die BufferedImages zeichnest du direkt.
 
Hallo Q-Dog,

du kannst es vielleicht auch mal mit einem ComponentsContainer versuchen. Er hat Null-Layout und ist dazu gedacht um JComponentBounds aufzunehmen (beweglich und Größe veränderbar, mit "snap to grid" Option). Er kann versteckte Komponenten durch Mausklick nach oben bringen (setComponentZOrder). Die aktuelle JComponentBounds kann gelöscht werden wenn sie fokusiert ist (über Löschtaste oder Kontextmenü). Der ComponentsContainer kann seinen Inhalt skalieren zu dem Zweck ihn zu drucken.

Gruß,
André
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben