JPanel mit JButtons und Bilder

Golightly

Mitglied
Ich benötige Hilfe, Input oder Beispiel für folgendes Anliegen:
Ich möchte auf einem JPanel per Drag and Drop JButtons und Bilder ablegen.
Die JButtons sollten dann ebenfalls per Drag and Drop mit Dateiverknüpfungen belegt werden können.
Die Bilder sollten dann in ihrer Größe und Lage veränderbar sein.
Im Nachgang sollte das Ganze dann in einer Datei zu speichern und auch wieder zu öffnen sein.

Besten Dank vorab !
Rudi
 
Und das ganze zur Laufzeit, also als Programm?

Du willst einen Editor fuer Swing schreiben. Das ist etwas...sagen wir mal, komplexer. Ich meine, meine Erfahrungen in der Hinsicht beschraenken sich darauf dass ich mal WindowBuilder gesehen habe und an einem solchen Editor im ERP Bereich mitgearbeitet habe, von dem her...also so etwas baut man in etwa so auf:

Du hast dein Fenster. In diesem Fenster hast du zwei Panele, naemlich einmal das "eigentliche" Panel, und einmal ein durchsichtiges Panel darueber welches jedes (Maus-)Ereignis abfangen kann bevor es an die "eigentlichen" Komponenten weitergeleitet wird. Wenn du editieren willst, also neue Knoepfe hinzufuegen willst, dann schaltest du das obere Panel ein und faengst saemtliche Ereignisse ab. Dann kannst du im oberen Panel zum Beispiel pruefen ob ein Knopf angeklickt wurde, und wenn ja ob dieser gezogen wir oder nicht und diesen dann neu positionieren basierend darauf. Gleichzeitig kannst du dann auch das Drag'n Drop abfangen in diesem oberen Panel und dann die Logik fuer den Knopf entpsrechend "konfigurieren". Das funktioniert relativ einfach weil wenn ein Ereignis auf deiner "Editieren"-Ebene passiert, dann gehst du mit diesen Koordinaten in dein "eigentliches" Panel und laesst dir die Komponente auf den Koordinaten geben, dann kannst du damit etwas machen.

Du kannst es auch ohne eine solche zweite Ebene machen, aber dann musst du alle Komponenten "hooken" damit du die Ereignisse alle im Editieren-Modus bekommst, das erscheint mir jetzt etwas komplizierter.

Persistieren kannst du das in einem dir absolut beliebigen Format, also da jetzt sowohl INI als auch XML oder JSON, das spielt keine Rolle. Theoretisch kannst du auch ueber die Standard Serialisierung von Java gehen, aber davon hoert man eigentlich relativ wenig und noch weniger gutes. Theoretisch koenntest du auch so etwas wir Kryo einsetzen, da weisz ich aber gerade nicht wie sich das mit Ereignissen und Logik verhaelt und wie man die dann am besten speichert.

Es gibt da auch noch JFormDesigner der so etwas macht, und die haben wohl auch eine Bibliothek die so etwas macht, aber das habe ich heute zum ersten mal gesehen.

Ein anderer, vielleicht viel einfacherer Weg, ist wenn du dir einen einfachen "Editieren Dialog" anlegst, wo man zum Beispiel einfach in einer Tabelle alle notwendigen Daten erfasst und du dann daraus einfach die Oberflaeche aufbaust. Nicht ganz so komfortabel, aber definitiv einfacher.
 
Weil ich das schon lange nicht mehr gemacht habe, habe ich mal schnell ein Beispielprojekt zusammen gestellt.

Also das Konzept ist dass die GUI immer aus dem Model generiert wird, dabei wird ein aktives Model verwendet (also das Model notifiziert alle dass es sich geaendert hat). ContentPanel ist hierbei die "eigentliche" Swing GUI welche dann vom Benutzer verwendet werden soll, EditorPanel ist dass was das Tutorial von oben "GlassPane" nennt. Also darin werden die Ereignisse abgefangen und dann das Model veraendert. Wenn man die Buttons verwenden wollen wuerde, muesste man die EditorPanel entweder entfernen oder sonst irgendwie "unscharf" schalten. Das habe ich jetzt mal nicht eingebaut weil spaet.

Die Markierung des aktuell markierten Buttons verschwindet beim ziehen...da habe ich irgendwo etwas vergessen oder uebersehen beim neuzeichnen der Komponenten, ist mir aber gerade egal was.
 

Anhänge


Zurück
Oben