代码分享:Swing外观 抗锯齿 字体设置

开发 后端
这个是一个界面显示效果的处理,Swing中文显示一直都是不怎么美观,经过修改,比默认的好看多了。下文提供代码。

 [图片]  默认

 [图片]  使用Nimbus

[图片]  使用Nimbus并开启抗锯齿

 

 [图片]  使用Nimbus,开启抗锯齿并使用自选字体

代码片段:

  1. package canghailan.ui;  
  2.  
  3. import javax.swing.*;  
  4. import javax.swing.plaf.FontUIResource;  
  5. import java.awt.*;  
  6. import java.util.HashMap;  
  7. import java.util.Map;  
  8.  
  9. /**  
  10.  * @author canghailan  
  11.  * @datetime 2011-12-19 11:13  
  12.  */ 
  13. public class UIs {  
  14.  
  15.     private static final String FALLBACK_FONT_FAMILY_NAME = Font.SANS_SERIF;  
  16.     private static final Map<String, String> FONT_FAMILY_NAMES = new HashMap<>();  
  17.     private static final String[] BEST_FONT_FAMILIES = {  
  18.             "微软雅黑""arial""sans-serif" 
  19.     };  
  20.     private static final int BEST_FONT_SIZE = 12// 12px  
  21.  
  22.     static {  
  23.         GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();  
  24.         String[] fontFamilyNames = env.getAvailableFontFamilyNames();  
  25.         for (String fontFamilyName : fontFamilyNames) {  
  26.             FONT_FAMILY_NAMES.put(fontFamilyName.toLowerCase(), fontFamilyName);  
  27.         }  
  28.         if (!FONT_FAMILY_NAMES.containsKey("serif")) {  
  29.             FONT_FAMILY_NAMES.put("serif", Font.SERIF);  
  30.         }  
  31.         if (!FONT_FAMILY_NAMES.containsKey("sans-serif")) {  
  32.             FONT_FAMILY_NAMES.put("sans-serif", Font.SANS_SERIF);  
  33.         }  
  34.     }  
  35.  
  36.     public static void enableAntiAliasing() {  
  37.         System.setProperty("awt.useSystemAAFontSettings""on");  
  38.         System.setProperty("swing.aatext""true");  
  39.     }  
  40.  
  41.     public static String getLookAndFeel() {  
  42.         try {  
  43.             for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {  
  44.                 if ("Nimbus".equals(info.getName())) {  
  45.                     return info.getClassName();  
  46.                 }  
  47.             }  
  48.         } catch (Exception ignore) {  
  49.         }  
  50.         return UIManager.getCrossPlatformLookAndFeelClassName();  
  51.     }  
  52.  
  53.     public static String getFontFamily(String[] fontFamilies) {  
  54.         for (String fontFamily : fontFamilies) {  
  55.             fontFamily = fontFamily.toLowerCase();  
  56.             if (FONT_FAMILY_NAMES.containsKey(fontFamily)) {  
  57.                 return FONT_FAMILY_NAMES.get(fontFamily);  
  58.             }  
  59.         }  
  60.         return FALLBACK_FONT_FAMILY_NAME;  
  61.     }  
  62.  
  63.     public static String[] getBestFontFamilies() {  
  64.         return BEST_FONT_FAMILIES;  
  65.     }  
  66.  
  67.     public static int getBestFontSize() {  
  68.         return BEST_FONT_SIZE;  
  69.     }  
  70.  
  71.     /*########################################*/ 
  72.  
  73.     public static void setUI() {  
  74.         enableAntiAliasing();  
  75.         // set LookAndFeel  
  76.         try {  
  77.             UIManager.setLookAndFeel(getLookAndFeel());  
  78.         } catch (Exception ignore) {  
  79.         }  
  80.         // set DefaultFont  
  81.         String bestFontFamily = getFontFamily(getBestFontFamilies());  
  82.         for (Map.Entry<Object, Object> entry : UIManager.getDefaults().entrySet()) {  
  83.             if (entry.getValue() instanceof FontUIResource) {  
  84.                 FontUIResource fontUIRes = (FontUIResource) entry.getValue();  
  85.                 entry.setValue(new FontUIResource(  
  86.                         bestFontFamily,  
  87.                         fontUIRes.getStyle(),  
  88.                         getBestFontSize() > fontUIRes.getSize() ?  
  89.                                 getBestFontSize() : fontUIRes.getSize()  
  90.                 ));  
  91.             }  
  92.         }  
  93.     }  

最新版本:UIs.java

源码下载:http://down.51cto.com/data/319345

原文链接:http://www.oschina.net/code/snippet_116768_7750

【编辑推荐】

  1. Jease 2.6发布 Java开源内容框架
  2. 一个Java程序员对2011年的回顾
  3. 用Java GUI编写的画板程序
  4. Java的动态绑定机制
  5. Java中带复选框的树的实现和应用

 

责任编辑:林师授 来源: 开源中国社区
相关推荐

2015-09-15 09:20:16

图片变形抗锯齿

2009-07-15 10:37:28

Swing外观

2009-07-10 12:30:12

Swing组件

2018-08-06 16:31:36

NVIDIA光线抗锯齿

2009-07-10 15:18:48

Synth外观Swing外观

2009-06-04 15:52:25

Netbeans6.5字体无法抗锯齿Ubuntu9.04

2012-05-31 14:11:49

SwingSubstance异常

2012-01-17 17:08:05

JavaSwing

2009-07-14 14:03:56

Swing程序

2009-06-10 17:11:01

linux netbe反锯齿处理

2010-04-26 16:36:31

DNS负载均衡设置

2009-06-10 20:24:17

netbeans my字体设置

2018-10-18 14:28:33

2009-07-15 09:24:30

Swing动态刷新

2021-08-07 07:59:20

Windows 11操作系统微软

2009-07-17 16:49:18

lookandfeelSwing

2009-07-14 16:07:59

调用JavaFX代码Swing程序

2009-07-14 16:02:04

SWT和Swing

2009-08-17 07:43:42

Linux命令行安装字linux命令行安装彩色字体设置

2010-07-08 13:32:17

UDPClient
点赞
收藏

51CTO技术栈公众号