最近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阅读器的界面,功能还在开发中,做的差不多了也开源出来分享。

最新文章

  1. [javascript svg fill stroke stroke-width points polygon属性讲解] svg fill stroke stroke-width points polygon绘制多边形属性并且演示polyline和polygon区别讲解
  2. es5.0安装问题
  3. iphone,pad等真机不被xcode识别,解决方法
  4. 解决ubuntu14.04下Qt 5.3.1下的QtCreator fcitx,ibus不能输入中文
  5. java--测体重练习
  6. hdu 1596 find the safest road(最短路,模版题)
  7. Modify the average program to promote for intergers repeatedly.stop when a nagetive number is entere
  8. 利用JavaAPI访问HDFS的文件
  9. java网络编程之socket
  10. 【JavaScript运算符与表达式】
  11. java随机分配端口占用其它服务端口问题完美解决
  12. 整理 logging 2种方式
  13. linux查看系统32位还是64位
  14. iis和tomcat同时运行,完美解决80端口冲突问题
  15. css3 的calc
  16. 《DSP using MATLAB》Problem 5.35
  17. Vivado HLS初识---阅读《vivado design suite tutorial-high-level synthesis》(3)
  18. [原][osg][osgearth]简单的通过osgDB,读取高程tif,修改高程tif
  19. log4net 写日志配置
  20. &lt;mvc:annotation-driven /&gt;注解详解

热门文章

  1. 前端-css-长期维护
  2. 微软要冷落windows是天方夜谭还是势在必行
  3. 响应式WEB页面开发实践
  4. leetcode第32题:最长有效括号
  5. CRISPR/Cas9|InParanoid|orthoMCL|PanOCT|pan genome|meta genome|Core gene|CVTree3|
  6. 在dataframe添加1行(首行,或者尾部),且不覆盖
  7. react和vue
  8. github 下载部分代码
  9. usb设备枚举过程
  10. 1,Hadoop知识储备