JLayeredPane Problem - AWT und SWING Komponente

Status
Nicht offen für weitere Antworten.

thomas.g

Bekanntes Mitglied
hi,

ich habe ein ganz großes Problem.
Ihr kennt ja bestimmt aus den Musiksendern die untertitel wenn ein anderes Video kommt.
Sowas möchte ich in meinem MediaPlayer auch haben.
das ganze habe ich mit JLayeredPane realisiert, bei einem JMF Component funktioniert das überlappen von AWT (component - wo das video gezeichnet wird) und Swing (JPanel - wo der Titel gezeichnet wird).
Sorgen bereitet mir allerdings das Canvas3D von Java3D. Das lässt sich nicht überlaggern. Ich weiß das das ein typisches Swing/AWT Problem ist, aber gibt es da eine Möglichkeit, wie ich das trotzdem realisieren kann?

thx, thomas
 
Tja... ein ähnliches Problem taucht bei mir auch auf. Es scheint immer in Verbindung mit AWT (oder SWING) und Canvas3D aufzutauchen. Es scheint demnach nicht möglich zu sein, ein Canvas3D -Objekt mit anderen Objekten zu überlagern. Bei mir handelt es sich um die Menüleiste eines JFrame, deren Menüs hinter dem Canvas3D-Objekt verschwinden. Selbst der Versuch das C3D-Objekt hinter einer "GLASSPANE" zu verstecken schlug fehl. Scheint im übrigen an Canvas3D zu liegen.

Lösung wird händeringend gesucht!

cu Spacerat
 
Canvas3D lässt sich net von Swing überlagern - es sei denn es gibt da irgendwelche spezielle Methoden wie setLightWeightPopup. Was man allerdings machen kann, ist, im Canvas3D preRender, postRender oder eine ähnliche Methode zu überschreiben und dort mit getGraphics2D() zu zeichnen. Man muss aber beachten, dass die zurückgegebenen Graphics J3DGraphics2D sind, und somit 1. nicht alle Operationen unterstützen und man 2. immer flush (true) aufrufen muss, um das gezeichnete auf den Canvas zu bringen - das senkt übrigens aber die Framerate leider ein wenig.
 
Vielen Dank für diese Information...

Leider lässt sich das Prob so wohl kaum lösen. Es geht (mir zumindest) nur darum, das das JMenue (von JMenuBar) nicht hinter dem Canvas verschwindet. Ok, inzwischen hab' ich rausgefunden, das sich sämtliche AWT-Komponenten unterhalb von Component sich so verhalten. Ich bräuchte also eine Möglichkeit, die gerenderten Frames in eine Component zu kopieren. Allerdeings sollen die 3D-Fahigkeiten (Picking usw.) erhalten bleiben. Möglicherweise workt das ja über "Offscreen-Rendering".

cu Spacerat

P.S.: Bei derartigen Hürden frage ich mich immer wieder, wer sich so etwas einfallen lässt. Was nutzen einem die Vorzüge fortgeschrittener Programmiertechniken (Java3D und Swing), wenn man sie nicht (oder nur schwerfällig) zusammen verwenden kann. Was solls, ist wohl Sache der Entwickler, derartige Umstände aus der Welt zu schaffen.
 
Also wenns nur ums Menu geht dann kannst du am Anfang deines Programms (siehe FAQ) JPopupMenu.setDefaultLightweightPopupEnabled (false); aufrufen.
 
Das habe ich schon probiert. Aber das funzt nicht. Liegt das evtl. daran, das ich mit einer JMenuBar und nicht mit einem JPopupMenu arbeite?

cu Spacerat
 
*rauskram*

Das interessiert mich hier auch, gibts inzwischen schon irgendwelche neuen Lösungen oder ähnliches?

Und thomas, du sagst das du es mit JMF hinbekommen hast ein JLabel drüber zu legen. Ich habe das ganze jetzt mal versucht und das Vid ist immer an oberster Stelle (habs auch mit JLayerdPane versucht)

mfg Mewel
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben