簡體   English   中英

Swing如何允許用戶選擇主題?

[英]Swing How do I allow a User-Selected Theme?

我試圖允許用戶更改應用程序主題,例如暗/亮等。

到目前為止,我一直在使用:

for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if (newTheme.equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        SwingUtilities.updateComponentTreeUI(getRootPane());
                    }
                });


                break;
            }
        }
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
    }

我不確定我是否真的應該改變整個外觀。 使用此方法的問題是,我看不到將jPanel設置為隨主題更改的任何方法。

我的意思是一個示例,例如設置:jPanel 1設置顏色:菜單jpanel 2設置顏色:背景

在主題1中,菜單可能為灰色,背景可能為藍色。 在主題2中,菜單將為綠色,背景為紅色

您是否嘗試實現SystemColor對象? SystemColors可以更改。 它們的紅色/綠色/藍色值與基礎操作系統主題相關。 例如,如果用戶更改其操作系統主題的文本突出顯示顏色,則SystemColor.textHighlight也會隨之更改。 在下一次重繪時,使用該SystemColor對象的所有Java組件都會以用戶更新的顏色進行重繪。

SystemColors的此功能允許Java應用程序使用跟蹤用戶自己的OS配色方案首選項的配色方案繪制用戶界面。 對於大多數情況(例如您的情況),不需要特殊的應用程序編碼。 希望這可以幫助!

  • 羅賓

正如@madprogrammer在評論中已經提到的那樣-通常不建議在運行時更改外觀(L&F),因為它可能會導致許多不良行為和潛在問題。

更具體地說-不同的L&F將具有不同的組件大小,間距,邊框和整體視覺樣式(除非您使用相同的L&F,但主題/外觀不同)。 在許多情況下,這會使您的應用程序UI外觀和在不同的L&F上的表現不一致,尤其是如果您想要的只是具有深色和淺色主題但UI布局/樣式相同的情況。 在運行時更改L&F可能還會在某種程度上將某些組件的狀態重置,這可能會導致應用程序出現邏輯錯誤。

更好的方法是使用支持深色和淺色(或任何其他)主題/外觀的單個L&F,因為如果您僅在與L&F開發人員相同的L&F的不同實現/配置之間進行更改,肯定會減少問題的發生。造成了這種可能性。 您可以在以下SO主題中找到當前可用L&F的完整列表: Java外觀(L&F)

盡管編寫自己的L&F也可能是一個不錯的解決方案,如果您准備投資的話。 但是請不要誤會,這不是一件容易的事,並且需要很多時間和Swing知識來創建一個。 特別是,Swing和L&F API的文檔記錄很少,原始開發人員並未提供很多有關如何制作一個的提示。 您只能走反復試驗之路。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM