何以解忧?唯有Java

其实程序员也懂得浪漫!
posts - 90, comments - 637, trackbacks - 0, articles - 2
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
    今天用Swing 做了一个模仿QQ2009的登录界面,用到了开源的Look&Feel (Substance),在使用的过程中遇到了一些问题,也学到了一些技巧。
Substance (https://substance.dev.java.net)有很多的外观可以选择,而且都很漂亮,还提供了强大的API供开发者使用。Substance 现在已经
发展到5.2RC 版了,一开始我使用的是5.1版,但是在使用的过程中发现了一些bug,当我使用Substance中提供的水印功能时,出现了许多的异常,这个bug在5.0的时候是没有的,后来我又下载了最新的5.2RC版,这个问题在5.2版中已经解决了。大家如果需要的话,可以点 点这里下载  。

第一个问题:如何完整的使用Look&Feel?


大家可能会问了,什么叫着完整的使用Look&Feel?这里先不急着说明,先让大家看一副截图;



大家看看上面幅图是否已经用了Look&Feel?  答案是正确的,但是并不完整,因为他的标题栏还没有改变,完整的使用Look&Feel后的截图如下:



是不是觉得很不一样了呢?对于Swing 的老手来说,这个是小菜一碟,但是对于新手来说就比较困难了,因为他们看到的使用look&feel的许多教程都是像
这样的:
  UIManager.setLookAndFeel(new SubstanceOfficeBlue2007LookAndFeel());
或者这样:
try {
      UIManager.setLookAndFeel(
"org.jvnet.substance.skin.SubstanceRavenGraphiteLookAndFeel");
    } 
catch (Exception e) {
      System.out.println(
"Substance Raven Graphite failed to initialize");
    }

或者说是我自己太菜了吧。总之我在认真学习Swing的外观使用之前我是不知道该如何使标题栏也改变的。
要改变标题栏其实只要一句话就够了,就是在main方法中添加这么一句:
 JFrame.setDefaultLookAndFeelDecorated(true);
如果想要让JDialog也改变的话,还要再加上: JDilog.setDefaultLookAndFeelDecorated(true);

下面是最终完成的界面,使用的是Substance中 OfficeBlue2007LookAndFeel



第二个问题,如何给应用程序添加水印或者说是背景?

官方的文档说的很少,也没有具体的使用例子说明,后来下载了Substance的源码来看才发现该如何使用。

以下就是我参考官方源码写的在main方法中的一段核心代码

JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
try {
            SubstanceImageWatermark watermark 
= new SubstanceImageWatermark(LoginFrame.class.getResourceAsStream("/demo/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()); 这句的下面。
否则你看不到水印的效果。下图是有水印和没水印的对比图(左边的是有水印的,右边的是没水印的):



再贴一张官方的一张截图:大家看看Swing写的 Office2007 界面如何?



评论

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2009-05-23 20:57 by Flyever,Zhang
good

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2009-05-23 21:01 by BruceLeey
非常好

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2009-05-23 23:04 by 黑蝙蝠
真的很不错~~~

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序[未登录]  回复  更多评论   

2009-05-23 23:48 by changedi
用过,感觉好多的开源的swing ui外观都不错~~~~

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2009-05-24 01:01 by 003
使用金典登陆窗口

请问什么叫“金典”

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2009-05-24 06:46 by huliqing
看起来确实很棒子

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2009-05-24 08:46 by 日月雨林@gmail.com
@003
不好意思,打字快了点写程序的时候没注意,谢谢你的提醒,应该是“经典” 才对。

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2009-05-24 12:28 by BeanSoft
不错啊 话说界面开发 Swing 的MVC模式还是很强的 ExtJS 基本上都是照搬它的设计思想

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2009-05-24 15:29 by 乐蜂
看起来确实很棒

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2009-05-24 23:07 by 无量字幕
很不错。。。

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2009-05-25 09:10 by 日月雨林@gmail.com
@BeanSoft
呵呵,最近很少看到BeanSoft老师在blogjava上发表文章哦。

# 找不到皮肤  回复  更多评论   

2009-05-25 22:23 by 梁晟
我去网站下载了substance-all,打算山寨你的qq界面,可是这么找不到
org.jvnet.substance.skin.SubstanceRavenGraphiteLookAndFeel
这个类呢?
望兄弟告知!

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2009-05-26 08:56 by 日月雨林@gmail.com
@梁晟
在包里面有啊,在src\org\jvnet\substance\skin 路径下啊!你打算改他的源码吗?
我用的是binary版的。源码只是研究一下看看的。

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2009-05-26 09:13 by FEI
@梁晟
这个类 org.jvnet.substance.skin.SubstanceRavenGraphiteLookAndFeel 是在 substance.jar 包里,需要下载 substance 5.2 library (https://substance.dev.java.net/files/documents/3294/127141/substance.jar)。

# 麻烦你帮忙  回复  更多评论   

2009-05-26 11:29 by 梁晟
首先,谢谢你的回复!
能不能,把你的java版本的qq的源代码分享一下,按照你的做了,可是
标题栏还是没有随主题改变而改变。
我的邮箱: lshsm@163.com

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2009-05-26 11:39 by 日月雨林@gmail.com
@梁晟
在main方法里添加
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
这里两行代码就可以了!

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2009-05-26 17:10 by BeanSoft
最近太忙了... 周末都没什么空

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2009-05-27 22:46 by 龙华城
能不能给个源码研究研究 82055185@qq.com

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2009-06-03 01:25 by 淡茗
请教楼主:用Substance 4 完全正常的代码在 5 中出错,是什么原因呢?能详细讲解下吗?

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2009-06-05 15:22 by 游客
给你个小提示 ,你的界面里面标签 就是带有qq图片的那个把它外层的容器边框设为0像素,这样的话你的那个图片右侧就不会显示出一块空白了

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2009-06-05 15:38 by 日月雨林@gmail.com
@龙华城
你用netbeans的设计器,你也可以做到的。源码就不发了。

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2009-06-05 15:40 by 日月雨林@gmail.com
@淡茗
substance 5.1里水印功能有bug ,我在博客里已经说明了,你难道没看到吗? 用5.2 没有问题了。

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2009-06-05 15:40 by 日月雨林@gmail.com
@游客
谢谢你的提醒,我回去改改!呵呵!

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2010-06-01 17:44 by GreatGhoul
很精彩的东西呀。

# re: 用开源Look&Feel (Substance)写 漂亮的Swing应用程序  回复  更多评论   

2012-07-19 21:28 by 争一代雄风
很不错!

只有注册用户登录后才能发表评论。


网站导航: