Swinghacks——抗锯齿字体2

swing小组在java5对抗锯齿字体做了新的支持,类com.sun.java.swing.SwingUtilities2

我在jdk1.5_22下查看了此类,其中有一个方法,如下:

    private static boolean drawTextAntialiased(JComponent c) {
        if (!AA_TEXT_DEFINED) {
            if (c != null) {
                // Check if the component wants aa text
                return ((Boolean)c.getClientProperty(
                                  AA_TEXT_PROPERTY_KEY)).booleanValue();
            }
            // No component, assume aa is off
            return false;
        }
        // 'swing.aatext' was defined, use its value.
        return AA_TEXT;
    }
此方法作用就是,当paint一个jcomponent的时候,会调用此方法用来判断此jcomponent是否用抗锯齿字体

要让此方法返回true,可以有2个条件,

1、AA_TEXT_DEFINED为false,然后设置jcomponent的clientproperty

默认AA_TEXT_DEFINED就是false,所以,可以在代码中做如下修改

	myComponent.putClientProperty(SwingUtilities2.AA_TEXT_PROPERTY_KEY,
		new Boolean(true));
好吧,这样还是比较麻烦,需要为每一个jcomponent增加这么一个客户端属性

2、另一个返回true的方式是AA_TEXT_DEFINED为true,并且AA_TEXT为true,我们看看SwingUtilities2类的这段static代码

    static {
        fontCache = new LSBCacheEntry[CACHE_SIZE];
        Object aa = java.security.AccessController.doPrivileged(
               new GetPropertyAction("swing.aatext"));
        AA_TEXT_DEFINED = (aa != null);
        AA_TEXT = "true".equals(aa);
        AA_FRC = new FontRenderContext(null, true, false);

        Object dragFix = java.security.AccessController.doPrivileged(
            new GetPropertyAction("sun.swing.enableImprovedDragGesture"));
        DRAG_FIX = (dragFix != null);
    }

这里aa是取的JVM属性,并且aa是一个字符串。

要让AA_TEXT_DEFINED为true,那aa必须有值;要让AA_TEXT为true,那aa必须是字符串"true"

这样就简单了,在jvm启动时加上参数既可,如下:

java -Dswing.aatext=true MyTestClass

我在jdk1.6_37上看了此类,已经做过改动,没有上面说的方法了;具体没研究,

下一篇博文将介绍用look and feel实现相同效果,但是需要用到额外的jar包,这个我已经上传到csdn资源中,应该是审核的原因吧,现在还没有放出来

下篇再给出下载地址和使用方法吧,本来想一篇直接写完的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java编程语言一般是和重要的企业级应用程序联系在一起的,运行它们的服务器可能主位于蒙大拿的某个冰冷的机房里。不过,是桌面应用催生了Java,未来也必将是桌面应让Java能更加光彩夺目。通过AWT和现在的Swing,Java为编写图形化用户界面提供了丰富的客户端API。不过想要让Java、AWT和Swing达到最佳性能并不容易(也不方便),特别是在模拟交互式Web站点或像Windows XP和Mac OS X这样的操作系统外观时更是如此。\r\n 本书能帮助JAVA开发人员跳过Swing的基础节直接让桌面应用程序贴近现实。如果读者是一个Java开人员,并想开发带有一流外观的企业级应用程序,那就应该掌握Swing。不过对Swing的hack并不仅仅局限于对它的正常使用,而是关于一些读者或许要经过多年才能领会到的技巧。它们是一些富有创造性的、原创的甚至是诡异的hack,能让读者发出由衷的惊叹:“我可没想过居然能用Swing干这个!”\r\n 在本书中,读者将学到:\r\n 过滤不用的列表控件,对用户的输入做出合适的反应;\r\n 为列表和组合框组件提供拖放功能;\r\n 在图形组件之间实现动态效果,并能创建动态列表式界面;\r\n 控制任何方面,从鼠标指针到光标,乃至闪动键盘灯;\r\n 在Swing中构建分层、覆盖组件并灵活使用透明窗格屏蔽Swing接口内部的复杂细节和伸缩性。 ================================== 对学习SWING很有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值