最近Sandeepin想寫個基於Java Swing的RSS閱讀器練練手,不過Swing默認主題太丑了,切成系統原生的主題也不是非常好看,正好感覺開發時用的IDEA主題很不錯,不管是Light還是Darcula,都符合現代UI的設計風格。自己仿界面肯定很難仿出來,於是網上找找有沒有類似風格的Swing UI庫。
首先找到的是Mouse0w0開源的JavaFXDarculaTheme,不過這是JavaFX的,先收藏吧。之后找到一個IntelliJ開發者放出的Darcula界面庫,試了試效果很不錯,可惜只有黑色主題。最后找到的FlatLaf則完美了,支持Light和Darcula,還有自己配色的幾種風格,於是嘗試折騰一下。
FlatLaf官方介紹說本庫是用於Java Swing桌面應用程序的現代的開源的跨平台的外觀庫。整個UI都是扁平化風格,支持Light、Dark、IntelliJ、Darcula和一些自己配色的主題,Java 8以上支持高DPI,無依賴,支持MigLayout布局,整合得挺好的。自己運行了一下官方demo,暗色主題效果和IDEA非常相近:
使用方法很簡單,首先Maven中引入依賴庫:
<dependencies>
<!-- https://mvnrepository.com/artifact/com.formdev/flatlaf -->
<dependency>
<groupId>com.formdev</groupId>
<artifactId>flatlaf</artifactId>
<version>0.26</version>
</dependency>
</dependencies>
之后在啟動JFrame之前先執行FlatLightLaf.install();即可,我用的是Light主題,如果想啟動Darcula,則運行FlatDarculaLaf.install();
包com.formdev.flatlaf下可看到多種風格均內置了install這種簡單安裝方法:
官方還指出了另一種啟用主題的方法,方便切換主題:
try {
UIManager.setLookAndFeel( new FlatLightLaf() );
} catch( Exception ex ) {
System.err.println( "Failed to initialize LaF" );
}
如果要定制化外觀,可以參考官方文檔:https://www.formdev.com/flatlaf/customizing/
幾種常用的配置:
圓角方角:
UIManager.put( "Button.arc", 0 );
UIManager.put( "Component.arc", 0 );
箭頭類型:
UIManager.put( "Component.arrowType", "chevron" );
UIManager.put( "Component.arrowType", "triangle" );
滾動條的上一個/下一個箭頭按鈕默認情況下是隱藏的,可以配置,寬度也可以修改:
UIManager.put( "ScrollBar.showButtons", true );
UIManager.put( "ScrollBar.width", 16 );
異想家Sandeepin還發現,甚至,FlatLaf支持IntelliJ平台主題!
搜索想要的主題:https://plugins.jetbrains.com/search?headline=0-theme&tags=Theme
下載源代碼,獲取.theme.json文件,拷到本地resources,使用:
IntelliJTheme.install(MyApp.class.getResourceAsStream("/com/myapp/themes/arc-theme-orange.theme.json"));
最后附上自己調用FlatLaf做的RSS閱讀器的界面,功能還在開發中,做的差不多了也開源出來分享。