Как уже упоминалось в комментарии @madprogrammer - обычно не рекомендуется изменять внешний вид (L & F) во время выполнения, поскольку это может вызвать много нежелательных действий и потенциально проблем.
Чтобы быть более конкретным - разные L & F будут иметь разные размеры компонентов, расстояния, границы и только общий визуальный стиль (если вы не используете тот же L & F, но с разными темами / оболочками). В результате во многих случаях пользовательский интерфейс вашего приложения будет выглядеть и работать непоследовательно на разных L & F, особенно если вам нужно иметь темные и светлые темы, но одинаковый макет / стиль пользовательского интерфейса. Изменение L & F во время выполнения может также до некоторой степени сбрасывать состояние некоторых компонентов, что потенциально может привести к логическим ошибкам в вашем приложении.
Лучшим подходом является использование одного L & F, который поддерживает темные и светлые (или любые другие) темы / оболочки, поскольку проблем, несомненно, будет гораздо меньше, если вы будете переключаться между разными реализациями / конфигурациями того же L & F, что и L & F Разработчик, скорее всего, объяснил эту возможность. Вы можете найти полный список доступных в настоящее время L & F по другой теме SO здесь: Java Look and Feel (L & F)
Хотя написание собственного L & F также может быть хорошим решением, если вы готовы в него инвестировать. Но не заблуждайтесь, это не простая задача, и для ее создания потребуется много времени и знаний Swing. В частности, Swing и L & F API довольно плохо документированы, и оригинальный разработчик не дал много советов о том, как их создать. Вы можете идти только путем проб и ошибок.