2016-06-29 3 views
0

Я уже сделал исследование о том, как сделать JInternalFrame показать только его содержимое без границ.Не удается удалить границу JInternalFrame | Nimbus L & F

Снимите верхнюю строку заголовка: hiding title bar of JInternalFrame? -java

Удалить окружающие границы: how to remove the borders in JInternalFrame?

Все работает гладко, пока я не тестировался свою работу с Numbus UI, я мог бы получить строку заголовка прочь, но окружающие границы застряли там:

enter image description here

ожидаемый результат (который работает на другие L & Fs) должно быть:

enter image description here

Я предполагаю, что есть некоторые UI связанные настройки, которые должны решить (UIDefaults или comp.putClientProperty()); но я не могу понять, что это такое.

+0

не прост в использовании неразделенный JDialog или JWindow (используется для аккордеона/док-станции) – mKorbel

+0

@mKorbel Мне удобнее использовать легкие компоненты. – Mordechai

+0

Таким образом, я не должен заботиться о перемещении родительского кадра, значении и т. Д. Событий. – Mordechai

ответ

0

С пробкой и ошибкой я нашел чистое, но все еще неполное решение.

Все, что мне нужно сделать, это изменить пользовательский интерфейс JInternalFrame на любой другой. Новый пользовательский интерфейс не будет делать реального рендеринга, так как я удалил заголовок и границы.

Это решение является неполным, НЕ ЗВОНИТЬ где-нибудь в вашем коде:

SwingUtilities.updateComponentTreeUI(); 

Это приведет к тому, внутренний каркас, чтобы сбросить обратно в пользовательский интерфейс по умолчанию.


РЕДАКТИРОВАТЬ: наконец нашли решение вышеуказанной проблемы сброса. Просто запретите Swing устанавливать любой другой пользовательский интерфейс.

Используя подкласс JInternalFrame:

@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) { 
     } 
    } 

Это фактически игнорирует любые изменения, чтобы установить пользовательский интерфейс, но я не доволен. Он перезагружает весь Look and Feel и может вызывать условия гонки, которые могут вызвать нежелательные настройки LaF.

Я по-прежнему ищу решение, устанавливая этот компонент только на Metal.

Смежные вопросы