Herachie von Komponenten

phouli89

Grünschnabel
Ich verwende ein JLayeredPane und versuche eine Funktion zu finden mit der man die Reihenfolge in der die Komponenten innerhalb des JLayeredPanen gezeichnet werden zu beeinflussen. Die ausgabe soll als XML gespeichert werden und dabei ist es wichtig in welcher Reihenfoilge ich die Objekte abfrage, standardmäßig bekomme ich die Objekte in umgekehrer Reihenfolge in der ich Sie hinzugefügt habe.

Frage: Kann man die Herachie bearbeiten? oder gibt es eine gängige Methode um die Reihenfolge zu setzen?

PS: die 3 Eben des JLayeredPane reichen nicht aus.
 
Ich meinte nur die 3 ebenen falls man auf jeder ebene ein objekt behält, das wäre etwas zu wenig und bevor jmd was falsch versteht dachte ich, schreib ichs dabei.

Ich habs mit ZOrder versucht, allerdings nützt mir das auch nichts.

setPosition hört sich gut an, werde ich später mal ausprobieren, vielen dank
 
Also setPosition habe ich einfach mal in einem anderen Beispielprogramm verwendet, da funktioniert es auch einwandfrei, allerdings funktioniert es nicht in meiner Hauptanwendung. Ich habe eine Class namens JComponentBounds verwendet um die Objecte auf dem JLayered Pane mit der Maus zu bewegen und skalieren, wenn ich ein Objekt anklicke wird die Position der JLayeredPane geändert und nach oben geschoben.

Ich probiere jetzt mal ob man die Position statisch festlegen kann und durchforste mal JComponentBounds. Welche Funktion könnte denn noch die Position beeinflussen?

Beispiel zum Programm:

JLayeredPane -> JComponentBounds -> JFormatedTextfield
JLayeredPane -> JComponentBounds -> JLabel
JLayeredPane -> JComponentBounds -> JTextPane
 
Ich muss zugeben, dass ich nicht 100%ig verstehe, was genau und warum du das willst und wo dabei dein Problem liegt...

Welche Funktion könnte denn noch die Position beeinflussen?

void moveToBack(Component c)
Moves the component to the bottom of the components in its current layer (position -1).
void moveToFront(Component c)
Moves the component to the top of the components in its current layer (position 0).
 
Beipiel:
JLayeredPane EditorPane = new JLayeredPane();
JLabel test1 = new JLabel("TEXT");
JFormatedTextfield test2 = new JFormatedTextfield("Noch ein Text");

JComponentBounds test1Scale = new JComponentBounds (test1, 0, 0, true);
JComponentBounds test2Scale = new JComponentBounds (test2, 0, 0, true);

EditorPane.add(test1Scale);
EditorPane.add(test1Scale);

Problem ist, dass ich JComponentBounds verwende, was eine abgeleitete Klasse von JInternal Frames ist. Innerhalb eine JComponentBounds-Objects liegen JComponents wie z.b. JLabel usw.
Sobald ich ein Object anklicke wird es in den vordergrund gestellt, aber ich jann keine funktion in JComponentBounds finden die begründet warum die Position wieder verändert wird.

Beim Anklicken erhält das Object Position 0 und alles anderen Objecte ruchtschen um jeweils einen Platz nach unten in der Reihenfolge. Ich muss die Reichenfolge aber vorher setzen und verhindern das die Reihenfolge durch anklicken beeinflusst wird.

JComponentBounds: http://wiki.byte-welt.net/wiki/JComponentBounds
 
Jetzt wird es mir ein wenig klarer..
Lass mich mal kurz zusammenfassen wie ich dein Problem bisher aufgefasst habe:
1. Du möchtest deine Components in einer Reihenfolge anordnen, weil es wichtig ist diese in einer bestimmten Reihenfolge abzuspeichern
2. Die Reihenfolge soll beim Klick in die JLayeredPane nicht geändert werden, d.h. die Reihenfolge soll beibehalten werden
3. Die Components müssen aber auf der JLayeredPane beweglich/skalierbar bleiben
Besonders das Zusammenspiel aus Punkt 2 und 3 bereitet dir Kopfschmerzen. Ist das so korrekt?

Meine Idee wäre, eine JRootPane zu verwenden. Eine JRootPane besitzt u.a. eine JLayeredPane, welche du so verwenden kannst wie bisher. Ein wichtiger Punkt ist, dass hier noch eine GlassPane drüberliegt, welche MouseEvents (siehe Punkt 2) abfangen kann. Ich denke man kann es dann auch so hinbekommen, dass man der GlassPane noch ein MouseEvent ausprogrammiert, welches Punkt 3 handhabt.

siehe http://download.oracle.com/javase/tutorial/uiswing/components/rootpane.html
 
Zuletzt bearbeitet:
Ja genau das brauche ich, tut mir leid wenn ichs etwas umständlich ausgedrückt habe. Ich denke ich werde es mit dem RootPane probieren, da die Software zukünfitig weiterentwicklet werden soll mach ich die Grundsteine lieber solide.

Vielen Dank
 
Zurück