Как я могу динамически изменить UIDefaults Java LAF? - PullRequest
1 голос
/ 30 октября 2008

Я работаю над настройкой приложения Swing путем динамического изменения UIDefaults. Конечная цель - изменить многие из них (цвета, шрифты, размеры, границы и т. Д.) И сохранить результаты для каждого пользователя. Хотя это может придать приложению нестандартный вид, клиент просит и клиент получает.

Единственная проблема, с которой я сталкиваюсь, заключается в том, что графический интерфейс будет обновляться только ОДИН РАЗ. Когда я впервые изменяю свойство пользовательского интерфейса, все замечательно, последующие изменения ни на что не влияют.

// called from the EDT
// uiKeyName points to some ColorUIResource
UIManager.getDefaults().put(uiKeyName, <<color from color picker>>);
SwingUtilties.updateComponentTreeUI(rootWindow);

Это работает один раз, но никогда больше. Идеи? * * 1006

1 Ответ

2 голосов
/ 30 октября 2008

Когда вы помещаете новый цвет (например) в таблицу, это объект Color или ColorUIResource? Насколько я понимаю, новое значение будет использовано, только если значение current равно null или экземпляр UIResource Таким образом, если вы вставите простой старый объект Color, любые последующие изменения будут игнорироваться.

Кроме того, как предполагает связанная страница документа, это может помочь только с цветом шрифта и переднего плана / фона; когда дело доходит до изменения таких вещей, как границы и поля, вам может не повезти. Это не то, для чего были разработаны Swing Pluggable LookAndFeels. Может быть, вы могли бы заинтересовать клиента в LAF на основе Synth?

...