Не удается удалить границу JInternalFrame | Нимб L&F
Я уже провел исследование о том, как сделать JInternalFrame
показывать только его содержимое без границ.
Удалить верхнюю строку заголовка: скрыть строку заголовка JInternalFrame? -Джава
Удаление окружающих границ: как убрать границы в JInternalFrame?
Все работает гладко, пока я не протестировал свою работу с Numbus UI, я мог снять строку заголовка, но окружающие границы застряли там:
Ожидаемый результат (который работает на других L&F) должен быть:
Я предполагаю, что есть некоторые настройки, связанные с пользовательским интерфейсом, которые должны решить эту проблему (UIDefaults
, или же comp.putClientProperty()
); но я не могу понять, что это такое.
1 ответ
Методом проб и ошибок я нашел чистое, но все еще неполное решение.
Все, что мне нужно сделать, это изменить пользовательский интерфейс 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) {
}
}
Это фактически игнорирует любые изменения, чтобы установить пользовательский интерфейс, но я не доволен этим. Это сбрасывает весь внешний вид и может вызвать гонки, которые могут вызвать нежелательные настройки LaF.
Я все еще нахожусь в поиске решения, устанавливая только этот компонент на Металл.