2016-03-26 11 views
1

Ich habe eine JPanel Scene genannt, die folgende JPanels umfasst: Frame, Projector, Tools.Wie man JPanel bleiben onTop (auf z-Achse), mit setLayout (null)

Ich benutze null Layout auf Scene, weil ich bestimmte Koordinaten verwenden möchte, so dass kein anderes Layout für mich passt. Ich verwende den folgenden Code, um die 3 JPanels in das Haupt-JPanel Scene hinzuzufügen.

setLayout(null); 
add(Tools); 
add(Frame); 
add(Projector); 

Ich benutze diesen Auftrag, weil ich Tools will immer oben sein (auf z-Achse).

Jetzt, wenn ich etwas innerhalb der Projector, die ein Repaint verursacht, dann Projector kommt über den anderen Schichten, versteckt Tools. Ich kann einen Thread verwenden, um das ganze Scene JPanel neu zu streichen, aber ich sehe diesen "Blitz", wenn Projector OnTop kommt und onBottom geht und ich das nicht tun will.

Irgendwelche Ideen?

+1

Dies ist eine gute Frage, aber mehr Code wäre hilfreich. – robbmj

+3

Speziell müssen Sie ein [mcve] erstellen und veröffentlichen. Denken Sie auch nicht, dass "kein Layout für mich funktionieren würde", da dies aller Wahrscheinlichkeit nach genau das ist, was Sie brauchen - ein anständiges Arbeitslayout ... aber angesichts der bisher veröffentlichten Informationen schwer zu sagen. –

+0

Was ist die erwartete Ausgabe? –

Antwort

3

Wenn Sie Komponenten in Bezug auf ihre z-Achse übereinander platzieren möchten, sollten Sie JLayeredPane als Hauptcontainer verwenden und dann Komponenten mit der add(...)-Methode hinzufügen, die als zweiten Parameter eine Ganzzahl verwendet. Die unterste Schicht sollte unter Verwendung von JLayeredPane.DEFAULT_LAYER hinzugefügt werden, was meiner Meinung nach 0 ist. Dadurch können Nicht-Oqaque-Top-Komponenten niedrigere Komponenten durch sie zeigen.

+0

müssen immer noch den Hauptcontainer neu streichen, damit 'tools' wieder auftauchen –

+0

@GiannisTzagarakis: muss immer noch erstellen und posten, dass [mcve] dieses Problem für uns demonstriert. Alles, was ich tun kann, um zu antworten, ist, das zu gebrauchen, was Sie uns gegeben haben. –

+2

@GiannisTzagarakis Swing-Layouts sind faul von Entwurf, sie ermöglichen es Ihnen, viele Komponenten zu einem Container hinzuzufügen, ohne die Containerhierarchie zu aktualisieren oder Repaints zu planen, bis Sie es tun, das ist genau die Art, wie die API entworfen wird – MadProgrammer