Упрощенный ComponentUI
Я разрабатываю пользовательский интерфейс в разгаре. Я хочу добавить возможность выбора между двумя четко определенными взглядами и ощущениями (laf), с возможностью расширить этот выбор в будущем. Я не планирую поддерживать какой-либо внешний вид, но я также не хочу быть привязанным к конкретному настраиваемому laf (один из поддерживаемых lafs - стандартный windows). Большая часть моего пользовательского интерфейса использует стандартные компоненты свинга, но есть небольшое количество компонентов пользовательского интерфейса, которые не имеют смысла обобщать. Они являются прямыми подклассами JComponent. Тем не менее, они должны изменить свой цвет и, возможно, некоторые другие мелкие детали при смене лафа. К сожалению, цвета по умолчанию для JComponent не подходят. Я прочитал за последний день статьи о UIManager и ComponentUI. Создание собственного ComponentUI для каждого компонента и внешнего вида, вероятно, сработало бы, но кажется сложным, учитывая отсутствие универсальности моих пользовательских компонентов и небольшие различия между планами lafs, которые я планирую.
То, что я хотел бы, является более простой схемой, которая, я думаю, работает примерно так (я новичок с lafs):
- Добавление нескольких пар ключ / значение централизованно в UIManager с использованием UIManager.put, например, "MyCustomComponent.background", "MyCustomComponent.foreground1", "MyCustomComponent.foreground2" и т. Д., Все определяют цвета, шрифты и т. П. Эффективно просто расширить данный laf с помощью некоторых определений цвета, но не с помощью ComponentUI.
- Некоторая функция в моем пользовательском компоненте вызывается всякий раз, когда изменяется laf, и я могу получить цвета / шрифты там.
- Если мое будущее мне лень, я хочу где-нибудь определить цвета по умолчанию. Более того, я бы хотел использовать стальные цвета из других JComponents, например фон по умолчанию из JTextArea, даже если мой пользовательский компонент не имеет прямого отношения к JTextArea (просто всегда есть фоновые цвета, которые подходят).
Как и где я мог бы реализовать такую схему? Нечто подобное должно как-то работать, но я не могу найти учебник, расположенный между жестким кодированием цвета (myComponent.setBackground) и разработкой собственной иерархии ComponentUI. Любая помощь приветствуется!