【Java Swing】Swing 界面风格开发
JAVA的界面编程,有SWT,Swing组件都可以支持界面开发。此处使用JAVA原生的Swing组件开发,介绍如何定制系统主题。
Swing界面外观的管理是由UIManager类来管理的。不同的系统上安装的外观不一样 ,默认的是java的跨平台外观。
1、获取系统所有默认外观
import javax.swing.*; import java.awt.*; import java.awt.event.*; public class MyWindow1 extends JFrame { public static void main(String []agrs) { UIManager.LookAndFeelInfo []info = UIManager.getInstalledLookAndFeels() ; for(UIManager.LookAndFeelInfo tem:info) { System.out.println(tem.getClassName()); } } }
在本机windows执行结果如下:
批注: UIManager.getCrossPaltformLookAndFeelClassName()执行结果,直接获取跨平台外观,返回的是外观类名字
批注: UIManager.getSystemLookAndFeelClassName()执行结果,获得系统的外观类名字
javax.swing.plaf.metal.MetalLookAndFeel
javax.swing.plaf.nimbus.NimbusLookAndFeel
com.sun.java.swing.plaf.motif.MotifLookAndFeel
com.sun.java.swing.plaf.windows.WindowsLookAndFeel
com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel
2、设置系统风格方法
UIManager.setLookAndFeel(new MetalLookAndFeel()); 或 try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); } catch (Exception e) { System.out.println("Substance Raven Graphite failed to initialize"); }
3、使用开源的 look feel
常见有:Seaglass、Substance ,可以从网上下载对应的JAR包。
Substance 的使用样例

try { UIManager.setLookAndFeel(new SubstanceLookAndFeel()); UIManager.put("swing.boldMetal", false); if (System.getProperty("substancelaf.useDecorations") == null)
{
// 使得标题栏和对话框跟随外观变化 JFrame.setDefaultLookAndFeelDecorated(true); JDialog.setDefaultLookAndFeelDecorated(true); } System.setProperty("sun.awt.noerasebackground", "true"); //设置当前的主题风格,同样还可以设置当前的按钮形状,水印风格等等 SubstanceLookAndFeel.setCurrentTheme(new SubstanceLightAquaTheme()); } catch (Exception e) { System.err.println("Oops! Something went wrong!"); }
4、添加水印背景
JFrame.setDefaultLookAndFeelDecorated(true); JDialog.setDefaultLookAndFeelDecorated(true); try { SubstanceImageWatermark watermark = new SubstanceImageWatermark(LoginFrame.class.getResourceAsStream("/001.jpg")); watermark.setKind(ImageWatermarkKind.SCREEN_CENTER_SCALE); SubstanceSkin skin = new OfficeBlue2007Skin().withWatermark(watermark); //初始化有水印的皮肤 UIManager.setLookAndFeel(new SubstanceOfficeBlue2007LookAndFeel()); SubstanceLookAndFeel.setSkin(skin); //设置皮肤 } catch (UnsupportedLookAndFeelException ex) { Logger.getLogger(LoginFrame.class.getName()).log(Level.SEVERE, null, ex); }
代码中 SubstanceLookAndFeel.setSkin(skin)必须要在 UIManager.setLookAndFeel(new SubstanceOfficeBlue2007LookAndFeel()); 这句的下面。
否则你看不到水印的效果
其中:SubstanceOfficeBlue2007LookAndFeel来自于开源的substance.jar
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)