`
君心可晴
  • 浏览: 17080 次
  • 性别: Icon_minigender_1
  • 来自: 茂名
社区版块
存档分类
最新评论

Java图形界面设计——substance皮肤

    博客分类:
  • UI
阅读更多
先看一段代码吧。

public class LAF_Local_1 extends javax.swing.JFrame {
    public LAF_Local_1() {
        super("透明窗体");
        this.setLayout(new java.awt.FlowLayout());
        this.add(new javax.swing.JButton("按钮"));
        this.add(new javax.swing.JCheckBox("复选按钮"));
        this.add(new javax.swing.JRadioButton("单选按钮"));
        this.add(new javax.swing.JProgressBar(20, 100));
        this.setSize(new java.awt.Dimension(400, 300));
        this.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        javax.swing.JFrame.setDefaultLookAndFeelDecorated(true);
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                java.awt.Window w = new LAF_Local_1();
                w.setVisible(true);
                com.sun.awt.AWTUtilities.setWindowShape(w, 
                		new java.awt.geom.Ellipse2D.Double(0, 0,
 w.getWidth(), w.getHeight()));
                com.sun.awt.AWTUtilities.setWindowOpacity(w, 0.6f);
            }
        });
    }
}
先说可能遇到的问题:“com.sun.awt.AWTUtilities.setWindowOpacity(w, 0.6f);”此行代码会报错“Access restriction: The type AWTUtilities is not accessible due to restriction on required library D:\Program Files\jdk1.6.0_24\jre\lib\rt.jar”,而解决的方法也很怪异,要在要在project build path中先移除JRE System Library,再添加库JRE System Library,之后就可以了。类似的问题也可以如此解决。还试过强行运行程序,也没问题。而project build path在哪,下面在介绍添加第三方jar包时,你就能看到它。

在上面的代码中,没用到第三方的jar包,只是掉用几个比较偏的方法也可玩点花样。
javax.swing.JFrame.setDefaultLookAndFeelDecorated(true);这一语句具体意思我还说不清楚,可查看AIP文档。加上此语句,界面看上去很不顺眼,难看。
com.sun.awt.AWTUtilities.setWindowShape(w, new java.awt.geom.Ellipse2D.Double(0, 0, w.getWidth(), w.getHeight()));没有解释,但从方法名及效果上看可知此语句能改变窗体的形状,前提是必须加上上面那句语句。为啥,不知道。
com.sun.awt.AWTUtilities.setWindowOpacity(w, 0.6f);添加此语句可改变窗体的透明度。第二个参数的赋值范围是0.0f~1.0f,数值越小,窗体透明度越高。


Swing中还自带了一款皮肤,看上去还蛮顺眼的。将上一段代码中的main方法改一下:
  
public static void main(String[] args) {
    	 try {
			javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (javax.swing.UnsupportedLookAndFeelException e) {
			e.printStackTrace();
		}          

        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                java.awt.Window w = new LAF_Local_1();
                w.setVisible(true);
                com.sun.awt.AWTUtilities.setWindowOpacity(w, 0.6f);
            }
        });
    }
此款皮肤支持上面提到的改变窗体透明度的方法,不支持上面的改变窗体形状的方法。至于能否满足要求,因人而异喽。接下来将介绍一款第三方的皮肤库:substance.jar。

不同版本的substance皮肤库其皮肤的样式及所在目录可能会不同。我用的是5.2版本的。其所有皮肤都再org.jvnet.substance.skin目录下,皮肤样式类名如下:
  • AutumnSkin
  • BusinessSkin
  • BusinessBlackSteelSkin
  • BusinessBlueSteelSkin
  • ChallengerDeepSkin
  • CremeCoffeeSkin
  • CremeSkin
  • DustCoffeeSkin
  • DustSkin
  • EmeraldDuskSkin
  • MagmaSkin
  • MistAquaSkin
  • MistSilverSkin
  • ModerateSkin
  • NebulaBrickWallSkin
  • NebulaSkin
  • OfficeBlue2007Skin
  • OfficeSilver2007Skin
  • RavenGraphiteGlassSkin
  • RavenGraphiteSkin
  • RavenSkin
  • SaharaSkin
  • TwilightSkin
  • /---------------------------------------------/
  • SubstanceAutumnLookAndFeel
  • SubstanceBusinessBlackSteelLookAndFeel
  • SubstanceBusinessBlueSteelLookAndFeel
  • SubstanceBusinessLookAndFeel
  • SubstanceChallengerDeepLookAndFeel
  • SubstanceCremeCoffeeLookAndFeel
  • SubstanceCremeLookAndFeel
  • SubstanceDustCoffeeLookAndFeel
  • SubstanceDustLookAndFeel
  • SubstanceEmeraldDuskLookAndFeel
  • SubstanceMagmaLookAndFeel
  • SubstanceMistAquaLookAndFeel
  • SubstanceMistSilverLookAndFeel
  • SubstanceModerateLookAndFeel
  • SubstanceNebulaBrickWallLookAndFeel
  • SubstanceNebulaLookAndFeel
  • SubstanceOfficeBlue2007LookAndFeel
  • SubstanceOfficeSilver2007LookAndFeel
  • SubstanceRavenGraphiteGlassLookAndFeel
  • SubstanceRavenGraphiteLookAndFeel
  • SubstanceRavenLookAndFeel
  • SubstanceSaharaLookAndFeel
  • SubstanceTwilightLookAndFee
  • /----------------------------------------------/
  • SubstanceCrosshatchWatermark
  • SubstanceImageWatermark
  • SubstanceNoiseWatermark
  • SubstanceNullWatermark
  • SubstancePlanktonWatermark
  • SubstanceStripeWatermark
  • SubstanceWatermarkl
以上水印还有待测试
使用substance的方法有多种;以下介绍两种:

/---------------------------1---------------------------/:
将上面例子中的main函数做一下改变

public static void main(String[] args) {

		JFrame.setDefaultLookAndFeelDecorated(true); //加上此语句连同窗体外框也改变
		JDialog.setDefaultLookAndFeelDecorated(true); //加上此语句会使弹出的对话框也改变
		 try {
	            //新建一个图片水印,路径可以自己该,使用自己喜欢的图片来做应用程序的水印图片,貌似图片要在src子目录下
	            SubstanceImageWatermark watermark = new SubstanceImageWatermark(LAF_Local_4.class.getResourceAsStream("001.bmp"));
	            
	            watermark.setKind(ImageWatermarkKind.APP_CENTER);
	            watermark.setOpacity((float) 0.7); //更改水印透明度
	            UIManager.setLookAndFeel(new SubstanceOfficeBlue2007LookAndFeel());
//	            UIManager.setLookAndFeel(new SubstanceCremeLookAndFeel());
	            
	            //可根据根据外观类型,设置相应的皮肤,实践证实不一定需要一一对应
//	            SubstanceSkin skin = new OfficeBlue2007Skin().withWatermark(watermark);
	            SubstanceSkin skin = new CremeSkin().withWatermark(watermark);
	            
	            //此语句设置外观
	            SubstanceLookAndFeel.setSkin(skin);

	        } catch (UnsupportedLookAndFeelException ex) {
	            Logger.getLogger(LAF_Local_4.class.getName()).log(Level.SEVERE, null, ex);
	        }
	        java.awt.EventQueue.invokeLater(new Runnable() {

	            public void run() {
	            	LAF_Local_4 text = new LAF_Local_4();//实例化窗体对象
	            	text.setVisible(true);
	            }
	        });
	}

/------------------2--------------------/:

public static void main(String[] args) {

		JFrame.setDefaultLookAndFeelDecorated(true);
		JDialog.setDefaultLookAndFeelDecorated(true);

		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				SubstanceImageWatermark watermark = new SubstanceImageWatermark(LAF_Local_4.class.getResourceAsStream("001.bmp"));
	            
	            watermark.setKind(ImageWatermarkKind.APP_CENTER);
	            watermark.setOpacity((float) 0.7);
				SubstanceLookAndFeel.setSkin(new OfficeBlue2007Skin().withWatermark(watermark));
				try {
					new LAF_Local_3().setVisible(true);

				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
在用上面的代码之前,应将substance.jar包导入工程中,注意是工程中。可以在src的同根目录下新建一个lib文件夹,将substance.jar包放入其中。右击工程,在弹出菜单的最下面一行有个Properties选项,左击该选项,在弹出的对话框的左面板有个Java Build Path的选项,左击该选项,此时对话框右面板变更,在对话框的最右边的面板有个Add Jar选项,将substance导入,接下来确定即可。

本人对Substance的了解有限,只能做些表面功夫。而一个好的界面仅有皮肤是不够的,内容及其布局的安排才是真功夫,所以本人觉得界面的美化,还需要加深对布局管理器、面板的了解,这有这样才能做出好看而实用的界面。另外使用第三方的jar包美化界面会出现bug,如:本人在做连连看时用到了substance.jar包,当改变Jtable中的数据时,其框架大小就会初始化,需要将相关值重新设置,这或许就是使用它的代价吧。更多信息可上网查找资料,由于在官网找不到资源,本人使用的substance.jar包也是别人共享的,所以在这也将资源一并上传。
分享到:
评论
3 楼 feargod 2011-09-14  
学习了
2 楼 yjheeq 2011-08-08  
有图片就好了
1 楼 hustwbno1 2011-08-05  
楼主应该贴点图片出来的啦  可已看看效果啊

相关推荐

    窗体美化substance.jar

    《窗体美化substance.jar——打造精致的Java GUI界面》 在Java编程中,GUI(图形用户界面)是用户与程序交互的重要途径。一个美观、易用的GUI能极大地提升用户体验,而“窗体美化substance.jar”正是这样一个专注于...

    substance7.1(全) Swing LAF

    "Substance7.1(全) Swing LAF"是一个针对Java Swing用户界面库的皮肤包,专注于提升应用程序的视觉外观和用户体验。Swing Look and Feel(LAF)是Java Swing框架的一部分,允许开发者改变应用程序的界面风格以适应...

    substance +JTattoo jar包

    这就引出了我们今天要讨论的主题——"Substance" 和 "JTattoo",这两个是Java Swing的第三方UI主题库,它们能够为Swing应用带来更加现代、美观的界面风格。 "Substance" 是一个流行的选择,它提供了大量的预定义...

    Swing换肤——JavaSE技术

    在Java Standard Edition (JavaSE) 中,Java Foundation Classes (JFC) 是一组图形用户界面 (GUI) 开发工具,它包括了Abstract Window Toolkit (AWT) 和 Swing 组件。Swing 是 JFC 的一部分,提供了丰富的组件库和...

    kernel-devel-4.18.0-553.45.1.el8-10.x86-64.rpm

    Rocky Linux 8.10内核包

    Simulink中三阶单环多位量化Σ-Δ调制器的设计与实现-音频带ADC的应用(复现论文或解答问题,含详细可运行代码及解释)

    内容概要:本文档详细介绍了如何在Simulink中设计一个满足特定规格的音频带ADC(模数转换器)。首先选择了三阶单环多位量化Σ-Δ调制器作为设计方案,因为这种结构能在音频带宽内提供高噪声整形效果,并且多位量化可以降低量化噪声。接着,文档展示了具体的Simulink建模步骤,包括创建模型、添加各个组件如积分器、量化器、DAC反馈以及连接它们。此外,还进行了参数设计与计算,特别是过采样率和信噪比的估算,并引入了动态元件匹配技术来减少DAC的非线性误差。性能验证部分则通过理想和非理想的仿真实验评估了系统的稳定性和各项指标,最终证明所设计的ADC能够达到预期的技术标准。 适用人群:电子工程专业学生、从事数据转换器研究或开发的技术人员。 使用场景及目标:适用于希望深入了解Σ-Δ调制器的工作原理及其在音频带ADC应用中的具体实现方法的人群。目标是掌握如何利用MATLAB/Simulink工具进行复杂电路的设计与仿真。 其他说明:文中提供了详细的Matlab代码片段用于指导读者完成整个设计流程,同时附带了一些辅助函数帮助分析仿真结果。

    计算机课后习题.docx### 【计算机科学】研究生入学考试计算机组成原理专项题库设计:考研复习资源集成与优化

    内容概要:该题库专为研究生入学考试计算机组成原理科目设计,涵盖名校考研真题、经典教材课后习题、章节题库和模拟试题四大核心模块。名校考研真题精选多所知名高校的计算机组成原理科目及计算机联考真题,并提供详尽解析,帮助考生把握考研命题趋势与难度。经典教材课后习题包括白中英《计算机组成原理》(第5版)和唐朔飞《计算机组成原理》(第2版)的全部课后习题解答,这两部教材被众多名校列为考研指定参考书目。章节题库精选代表性考题,注重基础知识与重难点内容,帮助考生全面掌握考试大纲要求的知识点。模拟试题依据历年考研真题命题规律和热门考点,精心编制两套全真模拟试题,并附标准答案,帮助考生检验学习成果,评估应试能力。 适用人群:计划参加研究生入学考试并报考计算机组成原理科目的考生,尤其是需要系统复习和强化训练的学生。 使用场景及目标:①通过研读名校考研真题,考生可以准确把握考研命题趋势与难度,有效评估复习成效;②通过经典教材课后习题的练习,考生可以巩固基础知识,掌握解题技巧;③通过章节题库的系统练习,考生可以全面掌握考试大纲要求的各个知识点,为备考打下坚实基础;④通过模拟试题的测试,考生可以检验学习成果,评估应试能力,为正式考试做好充分准备。 其他说明:该题库不仅提供详细的题目解析,还涵盖了计算机组成原理的各个方面,包括计算机系统概述、数据表示与运算、存储器分层、指令系统、中央处理器、总线系统和输入输出系统等。考生在使用过程中应结合理论学习与实践操作,注重理解与应用,以提高应试能力和专业知识水平。

    __UNI__DB9970A__20250328141034.apk.1

    __UNI__DB9970A__20250328141034.apk.1

    minio-rsc-Rust资源

    rust for minio

    4-4-台区智能融合终端功能模块型式规范(试行).pdf

    国网台区终端最新规范

    《基于YOLOv8的化工管道焊缝缺陷检测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    python源码-1个机器学习相关资源

    一个简单的机器学习代码示例,使用的是经典的鸢尾花(Iris)数据集,通过 Scikit-learn 库实现了一个简单的分类模型。这个代码可以帮助你入门机器学习中的分类任务。

    pyqt离线包,pyqt-tools离线包

    pyqt离线包,pyqt-tools离线包

    《基于YOLOv8的船舶机舱灭火系统状态监测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    SQL常用日期和时间函数整理及使用示例

    SQL常用日期和时间函数整理及在sqlserver测试示例 主要包括 1.查询当前日期GETDATE 2.日期时间加减函数DATEADD 3 返回两个日期中指定的日期部分之间的差值DATEDIFF 4.日期格式转换CONVERT(VARCHAR(10),GETDATE(),120) 5.返回指定日期的年份数值 6.返回指定日期的月份数值 7.返回指定日期的天数数值

    GSDML-V2.3-Turck-BL20-E-GW-EN-20160524-010300.xml

    GSDML-V2.3-Turck-BL20_E_GW_EN-20160524-010300.xml

    T_CPCIF 0225-2022 多聚甲醛.docx

    T_CPCIF 0225-2022 多聚甲醛.docx

    《基于YOLOv8的智能仓储货物堆码倾斜预警系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    《基于YOLOv8的智能仓储货物堆码倾斜预警系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计

    蚕豆脱壳机设计.zip

    蚕豆脱壳机设计.zip

    附件2-2:台区智能融合终端入网专业检测单位授权委托书.docx

    台区终端电科院送检文档

Global site tag (gtag.js) - Google Analytics