FlatLaf java swing的增强组件

介绍

Swing默认主题太丑了,FlatLaf 是目前最受欢迎的 Swing 增强库之一,主要专注于为 Swing 应用提供现代化的 UI 主题和外观增强,同时对部分核心组件进行了功能优化。它的设计目标是解决原生 Swing 界面老旧、高 DPI 适配差等问题,同时保持对原生 Swing API 的兼容性。

FlatLaf 完全开源免费(Apache License 2.0),适合所有希望优化 Swing 界面的项目。

官网:
https://www.formdev.com/flatlaf/

FlatLaf 的核心特点

  1. 现代化主题风格
    提供多种预设主题,包括:

    • 浅色主题(FlatLightLaf)、深色主题(FlatDarkLaf)
    • 模仿 IntelliJ IDEA 的 FlatIntelliJLaf
    • 模仿 macOS 的 FlatMacLaf、模仿 Windows 11 的 FlatWindows11Laf 等
      所有主题均采用扁平化设计,视觉简洁且符合现代审美。
  2. 高 DPI 支持
    自动适配高分辨率屏幕,解决原生 Swing 组件在高分屏下模糊的问题,确保文字、图标清晰显示。

  3. 零侵入性集成
    无需修改现有 Swing 代码,只需在应用启动时调用一行代码即可切换主题,完全兼容原生 Swing 组件(JLabel、JButton、JTable 等)。

  4. 丰富的自定义选项
    支持修改颜色、字体、边框圆角、组件大小等细节,例如:

    • 调整按钮圆角半径、 hover 效果颜色
    • 自定义表格行高、选中行背景色
    • 更换全局字体(支持系统默认字体)
  5. 性能优化
    相比其他主题库(如 Substance),FlatLaf 体积更小(约 500KB),渲染性能更优,不会明显增加应用启动时间。

  6. 活跃的更新维护
    持续更新以适配新系统(如 Windows 11、macOS Ventura)和 Java 版本,社区支持活跃。

FlatLaf 的增强组件

FlatLaf 本身不提供全新的组件类型,而是优化原生 Swing 组件的外观和行为,同时提供少量扩展工具类。主要增强点包括:

  1. 基础组件美化

    • 按钮(JButton):支持圆角、悬停/点击动画、图标与文字对齐优化
    • 文本框(JTextField):边框样式优化、焦点状态高亮、placeholder 提示文本(通过 FlatTextField 扩展)
    • 复选框(JCheckBox)、单选框(JRadioButton):更现代的勾选样式,支持自定义图标
    • 下拉框(JComboBox):展开动画、选项高亮效果优化
  2. 增强的文件选择器
    对原生 JFileChooser 进行样式重构,使其外观更接近现代操作系统的文件选择器,支持:

    • 更清晰的文件图标
    • 路径导航栏优化
    • 深色模式下的文件列表对比度调整
  3. 表格与树组件优化

    • JTable:行高自适应、选中行背景色与主题融合、网格线样式优化
    • JTree:节点展开/折叠动画、连接线样式美化
  4. 自定义组件工具类

    • FlatClientProperties:通过客户端属性快速配置组件样式(如设置按钮圆角:button.putClientProperty( FlatClientProperties.BUTTON_TYPE, FlatClientProperties.BUTTON_TYPE_ROUND ))
    • FlatUIUtils:提供主题颜色获取、高 DPI 计算等工具方法
    • FlatLafProperties:全局配置主题参数(如是否启用动画、字体大小等)

使用示例

依赖

<dependency>
    <groupId>com.formdev</groupId>
    <artifactId>flatlaf</artifactId>
    <version>3.6.1</version>
</dependency>

代码

只需在应用启动时添加一行代码即可启用 FlatLaf:

import com.formdev.flatlaf.FlatLightLaf;
import javax.swing.*;

public class FlatLafDemo {
    public static void main(String[] args) {
        // 启用 FlatLaf 浅色主题
        FlatLightLaf.setup();

        // 后续创建的所有 Swing 组件都会自动应用主题
        JFrame frame = new JFrame("FlatLaf 示例");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new JButton("现代风格按钮"));
        frame.pack();
        frame.setVisible(true);
    }
}

总结

FlatLaf 的核心价值在于用最低的成本提升 Swing 应用的视觉体验,它不改变原生 Swing 的组件结构,却能让界面从“传统风格”升级为“现代扁平化风格”。如果需要增强组件的功能(如更强大的表格、文件选择器),可以将 FlatLaf 与 SwingX 等功能型库结合使用(两者兼容良好)。


原文出处:/show_1GW1coF46to2.html