Swing Componente über Rahmen hinaus zeichnen

phouli89

Mitglied
Hallo, ich habe ein kleines Großes Problem mit der Darstellung von Swing componenten. Das Projekt ist ein grafischer Templateeditor. Die Basis zur Darstellung ist ein JLayeredPane, auf diesem werden in JInternalFrame gekapselte JComponent hinzugefügt (der JInternalFrame dient zur Scalierung und Bewegungmitteld Maus). Der Editor gibt das Template in XML-Form aus und kann diese auch wieder einlesen (Position, größe, farbe usw.).

Das Problem:
Es soll eine neue Funktion geben, welche es ermöglicht ein Template in dem Haupttemplate zu integrieren, meine erste Idee war natürlich einfach ein neues JLayered Pane auf dem Basis JLayered Pane zuerstellen. Das Problem ist allerdings dass die Objekte auf dem kleineren Template auch negative Koordinaten haben können, wenn Beispielsweise die X-Position -50 ist dann würde z.b. ein JLabel nicht ganz dargestellt da alles was über die Bounds geht nicht dargestellt werden kann. Meine Frage wäre nun ob es eine Möglichkeit gibt eine solche Funktion (auch mit anderen Swing Componenten) zu realisieren.
Es geht eigentlich auch nur um die X-Achse, Y Positionen immer positiv, vieleicht könnte man das JLayeredPane oder was immer am besten wäre auf voller X-Länge des Editors darstellen und mit irgendwelchen begrenzungen oder Offsets arbeiten, vieleicht hat jemand eine Idee.


Ich habe mal eine kleine Grafik zu der Situation erstellt zum besseren Verständnis:
attachment.php


Vielen Dank
 

Anhänge

  • editor_example.gif
    editor_example.gif
    8,7 KB · Aufrufe: 32
Zuletzt bearbeitet von einem Moderator:
Du könntest die Methode getLocation überschreiben und zuerst die super Methode aufrufen, kommt da was negatives zurück, müsstest das halt abändern..

Eventuell muss man dann auch getWidth und getHeight anpassen...
 
Danke ich denke das würde auch funktionieren, allerdings bin ich gerade auf eine brauchbare Methode gestoßen. Ich habe für das kleiner Template auch ein JLayeredPane verwendet, somit kann ich alle funktionen weiterhin benutzen. Dieses JLayeredPane ist genause breit wie die Basis-Editoroberfläche. Danach habe ich eine CompoundBorder verwendet, die kannt ich noch gar nicht, durch dese kann ich zei borders verwenden. Als äußere Border verwende ich eine EmptyBorder und setze die Insets je nachdem wie groß die kleine Editorfläche sein soll und als Innere eine LineBorder. Wenn ich nun auf diesem JLayeredPane was hinzufüge und nachher die Coordinaten abfragen will, dann kann ich mit kleinerEditor.getInsets().LEFT oder (Top, Right, Bottom) die Insets abfragen und abziehen. Ich bin erleichtert.
Aber trotzdem vielen Dank für deinen Vorschlag, ich denke den werde ich trotzdem noch implementieren um das handling zu verbessern.
 

Neue Themen


Zurück
Oben