2016-06-29 6 views
0

Ich habe bereits untersucht, wie man einen JInternalFrame nur seinen Inhalt ohne die Grenzen zeigen kann.Der Rahmen von JInternalFrame | kann nicht entfernt werden Nimbus L & F

Entfernen Sie die obere Titelleiste: hiding title bar of JInternalFrame? -java

entfernt die umliegenden Grenzen: how to remove the borders in JInternalFrame?

Alles funktioniert reibungslos, bis ich meine Arbeit mit Numbus UI getestet, ich auf die Titelleiste weg bekommen konnte, aber die umgebende Grenzen sind dort stecken:

enter image description here

das erwartete Ergebnis (die auf Werke andere L & Fs) sollte sein:

enter image description here

Ich gehe davon aus, dass eine UI bezogene Einstellung ist, die es lösen sollte (UIDefaults oder comp.putClientProperty()); aber ich kann nicht herausfinden, was es ist.

+0

ist nicht einfacher zu verwenden undecorated JDialog oder JWindow (für Akkordeon/Docking verwendet) – mKorbel

+0

@mKorbel Ich bin wohler mit der Verwendung von leichten Komponenten. – Mordechai

+0

Auf diese Weise muss ich mich nicht um Elternbild verschieben, iconify usw. Ereignisse kümmern. – Mordechai

Antwort

0

Mit Versuch und Irrtum fand ich eine saubere, aber immer noch unvollständige Lösung.

Alles, was ich tun muss, ist die Benutzeroberfläche der JInternalFrame zu ändern, nur um eine andere. Die neue Benutzeroberfläche wird kein Rendering durchführen, da ich die Titelleiste und Rahmen entfernt habe.

Diese Lösung unvollständig ist, nicht nennen überall in Ihrem Code:

SwingUtilities.updateComponentTreeUI(); 

Dies wird der innere Rahmen führen zurück in die Standard-UI zurückzustellen.


EDIT: Endlich eine Lösung für das oben Reset Problem gefunden. Verhindern Sie einfach, dass Swing eine andere als die benutzerdefinierte Benutzeroberfläche installiert.

eine Unterklasse von JInternalFrame Verwendung:

@Override 
public void updateUI() { 
     LookAndFeel laf = UIManager.getLookAndFeel(); 
     try { 
      UIManager.setLookAndFeel(new javax.swing.plaf.metal.MetalLookAndFeel()); 
     } catch (UnsupportedLookAndFeelException e) { 
     } 

     super.updateUI(); 

     try { 
      UIManager.setLookAndFeel(laf); 
     } catch (UnsupportedLookAndFeelException e) { 
     } 
    } 

Dies ignoriert effektiv eine Änderung der Benutzeroberfläche einstellen, aber ich bin nicht glücklich mit ihm. Es setzt das gesamte Look and Feel zurück und kann zu Wettlaufbedingungen führen, die unerwünschte LaF-Einstellungen verursachen können.

Ich bin immer noch auf der Suche nach einer Lösung und setze nur diese Komponente auf Metal.

Verwandte Themen