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资源中,应该是审核的原因吧,现在还没有放出来
下篇再给出下载地址和使用方法吧,本来想一篇直接写完的