2019独角兽企业重金招聘Python工程师标准>>>

先看一段代码吧。

Java代码  

  1. public class LAF_Local_1 extends javax.swing.JFrame {

  2. public LAF_Local_1() {

  3. super("透明窗体");

  4. this.setLayout(new java.awt.FlowLayout());

  5. this.add(new javax.swing.JButton("按钮"));

  6. this.add(new javax.swing.JCheckBox("复选按钮"));

  7. this.add(new javax.swing.JRadioButton("单选按钮"));

  8. this.add(new javax.swing.JProgressBar(20, 100));

  9. this.setSize(new java.awt.Dimension(400, 300));

  10. this.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);

  11. }

  12. public static void main(String[] args) {

  13. javax.swing.JFrame.setDefaultLookAndFeelDecorated(true);

  14. javax.swing.SwingUtilities.invokeLater(new Runnable() {

  15. public void run() {

  16. java.awt.Window w = new LAF_Local_1();

  17. w.setVisible(true);

  18. com.sun.awt.AWTUtilities.setWindowShape(w,

  19. new java.awt.geom.Ellipse2D.Double(0, 0,

  20. w.getWidth(), w.getHeight()));

  21. com.sun.awt.AWTUtilities.setWindowOpacity(w, 0.6f);

  22. }

  23. });

  24. }

  25. }

先说可能遇到的问题:“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方法改一下:

Java代码  

  1. public static void main(String[] args) {

  2. try {

  3. javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

  4. catch (ClassNotFoundException e) {

  5. e.printStackTrace();

  6. catch (InstantiationException e) {

  7. e.printStackTrace();

  8. catch (IllegalAccessException e) {

  9. e.printStackTrace();

  10. catch (javax.swing.UnsupportedLookAndFeelException e) {

  11. e.printStackTrace();

  12. }

  13. javax.swing.SwingUtilities.invokeLater(new Runnable() {

  14. public void run() {

  15. java.awt.Window w = new LAF_Local_1();

  16. w.setVisible(true);

  17. com.sun.awt.AWTUtilities.setWindowOpacity(w, 0.6f);

  18. }

  19. });

  20. }

此款皮肤支持上面提到的改变窗体透明度的方法,不支持上面的改变窗体形状的方法。至于能否满足要求,因人而异喽。接下来将介绍一款第三方的皮肤库: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函数做一下改变

Java代码  

  1. public static void main(String[] args) {

  2. JFrame.setDefaultLookAndFeelDecorated(true); //加上此语句连同窗体外框也改变

  3. JDialog.setDefaultLookAndFeelDecorated(true); //加上此语句会使弹出的对话框也改变

  4. try {

  5. //新建一个图片水印,路径可以自己该,使用自己喜欢的图片来做应用程序的水印图片,貌似图片要在src子目录下

  6. SubstanceImageWatermark watermark = new SubstanceImageWatermark(LAF_Local_4.class.getResourceAsStream("001.bmp"));

  7. watermark.setKind(ImageWatermarkKind.APP_CENTER);

  8. watermark.setOpacity((float) 0.7); //更改水印透明度

  9. UIManager.setLookAndFeel(new SubstanceOfficeBlue2007LookAndFeel());

  10. //              UIManager.setLookAndFeel(new SubstanceCremeLookAndFeel());

  11. //可根据根据外观类型,设置相应的皮肤,实践证实不一定需要一一对应

  12. //              SubstanceSkin skin = new OfficeBlue2007Skin().withWatermark(watermark);

  13. SubstanceSkin skin = new CremeSkin().withWatermark(watermark);

  14. //此语句设置外观

  15. SubstanceLookAndFeel.setSkin(skin);

  16. catch (UnsupportedLookAndFeelException ex) {

  17. Logger.getLogger(LAF_Local_4.class.getName()).log(Level.SEVERE, null, ex);

  18. }

  19. java.awt.EventQueue.invokeLater(new Runnable() {

  20. public void run() {

  21. LAF_Local_4 text = new LAF_Local_4();//实例化窗体对象

  22. text.setVisible(true);

  23. }

  24. });

  25. }

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

Java代码  

  1. public static void main(String[] args) {

  2. JFrame.setDefaultLookAndFeelDecorated(true);

  3. JDialog.setDefaultLookAndFeelDecorated(true);

  4. SwingUtilities.invokeLater(new Runnable() {

  5. public void run() {

  6. SubstanceImageWatermark watermark = new SubstanceImageWatermark(LAF_Local_4.class.getResourceAsStream("001.bmp"));

  7. watermark.setKind(ImageWatermarkKind.APP_CENTER);

  8. watermark.setOpacity((float) 0.7);

  9. SubstanceLookAndFeel.setSkin(new OfficeBlue2007Skin().withWatermark(watermark));

  10. try {

  11. new LAF_Local_3().setVisible(true);

  12. catch (Exception e) {

  13. e.printStackTrace();

  14. }

  15. }

  16. });

  17. }

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

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

转载于:https://my.oschina.net/rock912/blog/609797

Java图形界面设计——substance皮肤相关推荐

  1. java图形界面美化_Java图形界面设计——substance皮肤

    http://jianweili007-163-com.iteye.com/blog/1141358 ------------------------------------------------- ...

  2. java 图形界面设计,使用JPanel、JFrame 绘图,图形界面设计入门演示,各种主要绘图方法以及图片、文字插入

    那什么是JPanel?JFrame 又是什么呢?让我们先来了解一下他们的区别吧: JFrame是最底层,JPanel是置于其面上,同一个界面只有一个JFrame,一个JFrame可以放多个JPanel ...

  3. JAVA图形界面设计

    图形界面设计 1 Java Swing 概述 图形化界面(Graphics User Interface,GUI)是指采用图形方式显示的计算机操作用户界面. 通过图形化界面,用户和程序之间可以方便地进 ...

  4. java图形界面设计——求三角形的面积

    这是本学期开学的第一个作业,设计图形界面,实现圆形.矩形.三角形的周长和面积计算,要求涉及抽象.封装.继承.多态的知识点,并且每个图形在计算时都有自己的界面.由于不是专业学java的,代码写的简单粗暴 ...

  5. java转成图形界面_【转】java图形界面设计(AWT)

    [转自]http://blog.sina.com.cn/s/blog_616e189f0100ne1t.html 1.       基本的java Frame操作. Java的图形界面的类主要包括AW ...

  6. java图形界面设计 swing之JTable表格的创建使用-添加鼠标监听

    最近用java设计了一个桌面管理系统, 在数据展示模块的时候遇到了一点问题,找不到好的展示方式 最后发现了JTable这个类, 主要涉及这个类的构造与使用 注意:JTable都需要在JScrollPa ...

  7. java图形界面设计代码_Java图形界面设计

    一.总述 Java的图形用户界面由各种组件(component)构成,它们主要位于java.awt包与javax.swing包中.Swing与AWT最大的不同是,Swing在实现时,不包含任何本地代码 ...

  8. 保洁阿姨看完都会了!java图形界面设计代码

    二.解析 1. 硬件层的并发优化基础知识 存储器的层次结构图如下: 各级缓存耗时对比: 采用分层缓存的层次结构会带来数据不一致问题,如下图: 那么如何保证数据的一致性,现代CPU处理办法有两种: (1 ...

  9. JAVA-关于计算器的简单图形界面设计例子(不实现功能)

    对于刚刚学习JAVA的小伙伴们来说,对图形界面设计肯定不陌生,我们可以利用javax.swing类库来进行图形界面的简单设计. 下面我们用JAVA图形界面设计的相关基础知识来实现一个简易计算器的界面( ...

最新文章

  1. 基于hsv的亮度调整算法_改变HSV的H和V部分(比如可以增加图像亮度)
  2. solaris 10 安装Apache Mysql PHP
  3. eclipse/myeclipse高亮显示相同变量名 .
  4. VSCode 初次写vue项目并一键生成.vue模版
  5. 小波变换(wavelet transform)的通俗解释(三)
  6. 多个 Linux 发行版考虑移除 Chromium 软件包
  7. python画折线图虚线_python绘制简单折线图代码示例
  8. 怎么修改win11睡眠时间
  9. ccs 移植创建新工程_CCS新工程创建与配置
  10. QT学习-10/31/2012
  11. R2017b-Matlab安装教程
  12. JavaScript等于 == 与 恒等于 === 的区别
  13. jmeterweb登陆测试_JMeter (2) —— JMeter与WebDriver测试用户登陆以CAS SSO为例(101 Tutorial)...
  14. 数字图像入门 色彩的抖动
  15. Swing绝对布局之setBounds
  16. TKinter —— GUI in python  4. Handing User Event 小组件 赋功能 (概念 必看!)
  17. Lumion 11软件介绍
  18. 雅克比(Jacobi)迭代法解线性方程组(Matlab程序)
  19. leetcode刷题日记(一)—— 数组
  20. 软件项目中的常见风险因素

热门文章

  1. 7-46 银行排队问题之单队列多窗口服务 (10 分)
  2. 北林oj-算法设计与分析-Line up in the canteen(两种解法,附思路)
  3. SQL Server 2019 创建数据库(利用程序)
  4. 实验验证离散余弦变换和简单压缩应用,显示对应的原图,dct图和恢复的图像
  5. 计算机word数字逆序输出,如何让word中的内容倒序排列
  6. html将两张图重叠居中代码,【CSS技巧】多图片的垂直居中排版
  7. 图像处理笔记(十八):模板匹配
  8. C# 8.0 预览特性
  9. 铁乐学Python_day09_函数
  10. 搭建配置cacti,采集信息监控