如何在javax.swing中修改JFrame窗口的标题栏颜色
Swing自定义JFrame标题栏颜色的实现方案
Swing默认使用操作系统接管的原生标题栏,因此JFrame本身没有内置setTitleBarColor这类直接修改标题栏配色的API,你可以通过以下三种常用方案实现需求:
- 方案一:自定义绘制标题栏(跨平台兼容性最好)
首先关闭系统原生标题栏:
之后在JFrame顶部自行添加一个JPanel作为自定义标题栏,你可以自由设置这个JPanel的背景色,在上面添加标题文本、最小化/最大化/关闭按钮,再自行实现拖动窗口、窗口缩放、按钮交互的逻辑即可。你可以把这部分逻辑封装成工具类,对外直接暴露jFrame.setUndecorated(true);setTitleBarColor方法,完全符合你想要的调用习惯。该方案的适配性最强,所有操作系统都能生效,缺点是需要自行实现标题栏的全部交互逻辑,开发成本稍高。
- 方案二:调用系统专属API(仅适用于特定平台)
如果你的应用不需要跨平台运行,可以直接调用对应系统的原生接口实现:- Windows平台:通过JNA调用user32.dll的相关窗口属性接口,直接修改标题栏配色,Win10及以上版本还支持直接设置暗色标题栏等属性
- macOS平台:可以通过
com.apple.eawt包下的专用API,或者反射调用系统内置的标题栏颜色设置接口
- 方案三:使用第三方外观库(开发成本最低)
现在不少成熟的Swing LookAndFeel库已经内置了自定义标题栏的能力,比如常用的FlatLaf,你只需要引入依赖后调用封装好的API即可实现,示例代码如下:
该方案不需要自行开发自定义标题栏的交互逻辑,同时也支持跨平台使用,是大部分场景下的最优选择。// 初始化FlatLaf外观 FlatLightLaf.setup(); // 开启LAF提供的自定义标题栏能力 JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("自定义标题栏测试"); // 直接调用API设置标题栏颜色 FlatClientProperties.setTitleBarColor(frame, new Color(28, 32, 38));
内容的提问来源于stack exchange,提问作者Ruthvik
相关产品推荐
相关产品推荐

