Swing外观 抗锯齿 字体设置

package canghailan.ui;
 
import javax.swing.*;  
import javax.swing.plaf.FontUIResource;  
import java.awt.*;  
import java.util.HashMap;  
import java.util.Map;  
 
 
public class UIs {  
 
    private static final String FALLBACK_FONT_FAMILY_NAME = Font.SANS_SERIF;  
    private static final Map<String, String> FONT_FAMILY_NAMES = new HashMap<>();  
    private static final String[] BEST_FONT_FAMILIES = {  
            "微软雅黑", "arial", "sans-serif" 
    };  
    private static final int BEST_FONT_SIZE = 12; // 12px  
 
    static {  
        GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();  
        String[] fontFamilyNames = env.getAvailableFontFamilyNames();  
        for (String fontFamilyName : fontFamilyNames) {  
            FONT_FAMILY_NAMES.put(fontFamilyName.toLowerCase(), fontFamilyName);  
        }  
        if (!FONT_FAMILY_NAMES.containsKey("serif")) {  
            FONT_FAMILY_NAMES.put("serif", Font.SERIF);  
        }  
        if (!FONT_FAMILY_NAMES.containsKey("sans-serif")) {  
            FONT_FAMILY_NAMES.put("sans-serif", Font.SANS_SERIF);  
        }  
    }  
 
    public static void enableAntiAliasing() {  
        System.setProperty("awt.useSystemAAFontSettings", "on");  
        System.setProperty("swing.aatext", "true");  
    }  
 
    public static String getLookAndFeel() {  
        try {  
            for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {  
                if ("Nimbus".equals(info.getName())) {  
                    return info.getClassName();  
                }  
            }  
        } catch (Exception ignore) {  
        }  
        return UIManager.getCrossPlatformLookAndFeelClassName();  
    }  
 
    public static String getFontFamily(String[] fontFamilies) {  
        for (String fontFamily : fontFamilies) {  
            fontFamily = fontFamily.toLowerCase();  
            if (FONT_FAMILY_NAMES.containsKey(fontFamily)) {  
                return FONT_FAMILY_NAMES.get(fontFamily);  
            }  
        }  
        return FALLBACK_FONT_FAMILY_NAME;  
    }  
 
    public static String[] getBestFontFamilies() {  
        return BEST_FONT_FAMILIES;  
    }  
 
    public static int getBestFontSize() {  
        return BEST_FONT_SIZE;  
    }  
 
     
 
    public static void setUI() {  
        enableAntiAliasing();  
        // set LookAndFeel  
        try {  
            UIManager.setLookAndFeel(getLookAndFeel());  
        } catch (Exception ignore) {  
        }  
        // set DefaultFont  
        String bestFontFamily = getFontFamily(getBestFontFamilies());  
        for (Map.Entry<Object, Object> entry : UIManager.getDefaults().entrySet()) {  
            if (entry.getValue() instanceof FontUIResource) {  
                FontUIResource fontUIRes = (FontUIResource) entry.getValue();  
                entry.setValue(new FontUIResource(  
                        bestFontFamily,  
                        fontUIRes.getStyle(),  
                        getBestFontSize() > fontUIRes.getSize() ?  
                                getBestFontSize() : fontUIRes.getSize()  
                ));  
            }  
        }  
    }  
}

转载于:https://my.oschina.net/axes/blog/117417

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值