用开源Look&Feel (Substance)写 漂亮的Swing应用程序

今天用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
界面如何?

转:http://www.blogjava.net/gml520/archive/2009/05/23/277603.html

时间: 2024-09-29 23:53:39

用开源Look&Feel (Substance)写 漂亮的Swing应用程序的相关文章

Nodejs开源项目里怎么样写测试、CI和代码测试覆盖率

测试 目前主流的就bdd和tdd,自己查一下差异 推荐 mocha和tape 另外Jasmine也挺有名,angularjs用它,不过挺麻烦的,还有一个选择是qunit,最初是为jquery测试写的,在nodejs里用还是觉得怪怪的. 如果想简单可以tap,它和tape很像,下文会有详细说明 mocha mocha是tj写的 https://github.com/mochajs/mocha var assert = require("assert") describe('truth',

小规则让你写出漂亮又高效的程序

本文来自肥宝游戏,引用必须保留文末二维码!!! 好几天没写文章了,周一整理自己刚修好的旧电脑,发现一本书<高质量C++编程指南>.因为最近在写游戏服务端的战斗,所以这个立刻就吸引肥宝了.看了几天,深深感觉获益良多啊.于是把笔记和自己的经验写下来,分享给大家. 一.写出漂亮易读的程序 中学时代上课很喜欢做笔记,但是肥宝几乎没看过自己的笔记,不是肥宝懒,是因为肥宝字太丑了. 后来成为一个程序员,以为这些代码都是电脑输出,统一字体,就不用这么纠结了.谁知道代码更需要写得漂亮,因为需求是不断在变化的,

为自己尝试写点东西吧,程序员们!

2012年秋季,正是大伙急于找实习工作的时候.尝试出去找过很多实习单位,但是基本上都是不靠谱,然后就是我自己能力的不足.所以找工作之路也是异常艰辛和曲折. 学了那么久的Java,做过那么多的小练习,但是说实话,感觉没有一个作品或者成功是相对完整的,无论是在UI界面,功能完善上都是如此.原因大多是心态上比较敷衍,人比较懒惰,没有把东西当作真正的作品.那个时候看过很多大神写的博客系统,自己也玩过wordpress,所以一直想给自己写一个博客系统,这一次决心做的像样些,要来的专业些.那个时候也是没有犹

ASP.NET 使用application和session对象写的简单聊天室程序

ASP.Net中有两个重要的对象,一个是application对象,一个是session对象. Application:记录应用程序参数的对象,该对象用于共享应用程序级信息. Session:记录浏览器端的变量对象,用来存储跨网页程序程序的变量或者对象. 说实话,写了快一年的asp.net,application对象还真没怎么用过.看了看书,根据这两个对象的特性写了一个简单的聊天室程序.真的是非常的简陋. 我的思路是,有两个页面Default页和ChatRoom页,页面布局如图: Default

小程序初体验:手把手教你写出第一个小程序(一)

本文笔者将根据quick start中的范例代码,带大家简单地剖析一下小程序的运行方式,并介绍小程序开发中一些通用的特性,带着大家一步步写出自己的小程序. 适用对象:前端初学者,对小程序开发感兴趣者 tips:由于笔者也是一位前端菜鸟,所以尽量用简单直白的语言为大家讲解,如有说的不到位的地方,还望多多指教. 吊了我们一年胃口的小程序终于和大家见面了.经过了一天的发酵,小程序已经成为了今天的超级头条(汪汪哭晕在厕所). 经历了一天媒体对小程序的狂轰滥炸,相信大家对于小程序一定充满了好奇.与其跟风转

DuiVision开发教程(2)-如何写一个简单的界面程序

基于DuiVision界面库开发的界面程序主要包括如下几部分内容: 1.资源定义,包括图片资源.各个窗口界面的xml定义文件 2.事件处理类代码,用于处理界面响应消息 3.其他业务逻辑代码 下面举例说明如何写一个简单的界面程序. 第一步:使用VC向导创建一个有两个tab页面的DuiVision工程 向导生成的解决方案文件如下: 默认有两个工程,分别是DuiVision库和应用程序工程.自动生成的代码目录中bin目录下的内容那个如下,bkimg目录存放窗口背景图片,skins目录存放图片资源,xm

一个漂亮的java烟花程序

<img src="http://img.blog.csdn.net/20140617111511890?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzkxMDM1Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />package org.jetic.web.chat; impo

Python3的tkinter写一个简单的小程序

一.这个学期开始学习python,但是看了python2和python3,最后还是选择了python3 本着熟悉python的原因,并且也想做一些小程序来增加自己对python的熟练度.所以写了一个简单的程序,这个小程序实现了basa64.base32的加解码.并且添加了一个md5生成的功能.ps:觉得python开发也挺好玩的... 二.运行程序截图: 上面的就是程序的整体界面了.. 三.程序的设计: 源代码就在下面贴图了,并且需要的文档可以--------------搜索吧..... imp

Java写的第一个小程序

大二刚开学,开始学习Java,结合假期里学到的一些知识,写了一个简单的程序. 有点像之前很火的”别踩白块儿“,但是简单的多,暂时就把它叫做“静止的别踩白块儿”. [玩法]鼠标点击出现色块的地方,点对加10分,点错减100分,负分游戏结束. 现在的不足和问题: 点击错误时,不能马上显示Game Over,必须再点对一次才能显示.我原想应该是if(grade<0)那个程序段的位置不对,但是调试不出来. 另外,方块永远只能按同一速度出现,一个点完才会出现下一个,这也是个问题,现在我的水平还不能写出来.