2008-10-30 46 views
1

我正在通過動態更改UIDefaults來調整Swing應用程序。最終目標是改變它們中的許多(顏色,字體,大小,邊界等)並將結果保存在每個用戶的基礎上。雖然它可能會給應用程序一些不規範的外觀,但客戶會詢問並且客戶端會收到。如何動態更改Java LAF UIDefaults?

我遇到的唯一問題是GUI將只更新一次。我第一次改變一個UI屬性everthing是很好的,後續的改變不會影響任何東西。

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

它工作一次,但從來沒有再次。想法?

回答

2

當您將新顏色(例如)放入表格中時,是Color對象還是ColorUIResource?據我瞭解,只有當電流值值爲nullUIResource的實例時纔會採用新值。因此,如果插入一個普通的舊Color對象,則所做的任何後續更改都將被忽略。

此外,正如鏈接的文檔頁面所示,這可能只對字體和前景/背景顏色有所幫助;當談到改變邊界和利潤率這樣的事情時,你可能會倒黴。這不是Swing的Pluggable LookAndFeels設計的。也許你可能會對基於Synth的LAF感興趣的客戶端?

+0

我們不能使用Synth,因爲我們正在定製的第三方LAF不是Synth,我們不能偏離...。下一個版本我會考慮基於Synth的LAF。 ColorUIResources完美運作。謝謝! – basszero 2008-10-31 14:12:48