java 全局字体抗锯齿_Swing外观 抗锯齿 字体设置

该博客介绍了一种方法来实现Java Swing应用程序的全局字体抗锯齿,通过设置`awt.useSystemAAFontSettings`和`swing.aatext`属性为`on`,并使用Nimbus Look and Feel,确保文本清晰显示。同时,提供了获取最佳字体家族和大小的函数,以适应不同系统的字体设置。
摘要由CSDN通过智能技术生成

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 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 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()

));

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值