仿IntelliJ Darcula的Swing主題FlatLaf使用方法

最近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閱讀器的界面,功能還在開發中,做的差不多了也開源出來分享。