Не удается удалить границу 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.

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

Другие вопросы по тегам