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

————————————————————————————————————————————————————————————

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包也是别人共享的,所以在这也将资源一并上传。

Java图形界面设计——substance皮肤的更多相关文章

  1. 【转】java图形界面设计(AWT)

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

  2. java图形界面设计

    1.       基本的java Frame操作. Java的图形界面的类主要包括AWT和Swing.在AWT中图形元素的父类为Component. 继承关系如下:Component->Cont ...

  3. Java图形界面学习---------简易登录界面

    /** * @author Administrator * Java图形界面学习---------简易登录界面 * date:2015/10/31 */ import java.awt.BorderL ...

  4. Java 图形界面开发--图文并茂建立学生管理系统

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/50932501 冷血之心的博客) 图形用户界面(Graphics U ...

  5. Java图形界面GUI

    Java图形界面GUI 设置窗体JFrame对象 package com.Aha.Best; import javax.swing.ImageIcon; import javax.swing.JFra ...

  6. MATLAB图形界面设计(下)

    文章参考Blue Mountain https://www.cnblogs.com/BlueMountain-HaggenDazs/p/4307777.html 一.菜单设计 1.建立菜单项 (1)建 ...

  7. Sprint 2 : ios图形界面设计与代码整合

    这周我们主要focus在personal photo experience 项目的ios图形界面设计与代码整合工作上. 工作进度: 1. 图形界面设计方面:兆阳和敏龙基本已经将ios手机客户端的雏形界 ...

  8. python的re模块一些方法 && Tkinter图形界面设计 && 终止python运行函数 && python读写文件 && python一旦给字符串赋值就不能单独改变某个字符,除非重新给变量赋值

    Tkinter图形界面设计见:https://www.cnblogs.com/pywjh/p/9527828.html#radiobutton 终止python运行函数: 采用sys.exit(0)正 ...

  9. Java第5次实验提纲(Java图形界面编程)

    1. Swing与NetBeans 使用NetBeans编写简单界面.见GUI实验参考文件中的0.第06次实验(图形程序设计.事件处理与Swing).doc 题目1: Swing用户界面组件与事件处理 ...

随机推荐

  1. 微信小程序 开发过程中遇到的坑(一)

      2124 1.我们使用app.json文件来对微信小程序进行全局配置,决定页面文件的路径.窗口表现.设置网络超时时间.设置多 tab 的时候在pages中写注释的时候回报错. 例如: { &quo ...

  2. Python 父目录获取

    # coding=utf-8import os currentPath = os.getcwd() # 当前目录parent_path = os.path.dirname(currentPath) # ...

  3. Webbench是有名的网站压力测试工具

    [root@666 webbench-1.5]# yum install ctags [root@666 webbench-1.5]#make && make install inst ...

  4. Cowboy实例

    这个例子主要是用cocos2d-x引擎自带的资源 cocos2d-x-2.2.2\samples\Cpp\TestCpp\Resources\armature 新建工程之后 #include &quo ...

  5. CCardSlip

    该类已经把tableview封装好,可以把它当做一个精灵来用,这样做的好处是,当一个界面同时需要多个tableview的时候就可以很好的解决这个问题,而且模块也更清晰. //------------- ...

  6. 哈佛大学 Machine Learning

    https://am207.github.io/2017/material.html https://am207.github.io/2017/topics.html https://am207.gi ...

  7. PHP网站环境搭配: Apache Http+PHP+Mysql

    Apache Http+PHP+Mysql 环境搭配 1. 先下载上述三个软件 都要下载对应系统的软件,mysql还可以再下载navicat for mysql. 2.  安装Apache Http ...

  8. 漫游Kafka之过期数据清理【转】

    转自:http://blog.csdn.net/honglei915/article/details/49683065 Kafka将数据持久化到了硬盘上,允许你配置一定的策略对数据清理,清理的策略有两 ...

  9. 【内核】内核链表使用说明,list.h注释

    list_entry定义 /** * list_entry - get the struct for this entry * @ptr: the &struct list_head poin ...

  10. DLL中获取主程序句柄

    一.问题由来及说明 在实际编程中遇到一些系统模块(或API)调用初始化需要窗口句柄,在主程序中(MFC或者win32)都可以很容易获得,比如mfc中可以直接调用AfxGetMainWnd().GetS ...