测试字体是否是Java中的一等
发布时间:2020-09-22 03:23:14  所属栏目:Java  来源:互联网 
            导读:我正在列出用户机器上可用的所有等宽字体.我可以通过以下方式获取Swing中的所有字体: String[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment() .getAvailableFontFamilyNames(); 有没有办法弄清楚哪些是均匀的? 提前致谢.
                
                
                
            | 
                         我正在列出用户机器上可用的所有等宽字体.我可以通过以下方式获取Swing中的所有字体: String[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment()
                                    .getAvailableFontFamilyNames(); 
 有没有办法弄清楚哪些是均匀的? 提前致谢. 解决方法您可以使用 FontMetrics课程的 getWidths()方法.根据JavaDoc:
 您可以使用FontMetrics类的charWidth(char)方法.例如: Set<String> monospaceFontFamilyNames = new HashSet<String>();
GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
String[] fontFamilyNames = graphicsEnvironment.getAvailableFontFamilyNames();
BufferedImage bufferedImage = new BufferedImage(1,1,BufferedImage.TYPE_INT_ARGB);
Graphics graphics = bufferedImage.createGraphics();
for (String fontFamilyName : fontFamilyNames) {
    boolean isMonospaced = true;
    int fontStyle = Font.PLAIN;
    int fontSize = 12;
    Font font = new Font(fontFamilyName,fontStyle,fontSize);
    FontMetrics fontMetrics = graphics.getFontMetrics(font);
    int firstCharacterWidth = 0;
    boolean hasFirstCharacterWidth = false;
    for (int codePoint = 0; codePoint < 128; codePoint++) { 
        if (Character.isValidCodePoint(codePoint) && (Character.isLetter(codePoint) || Character.isDigit(codePoint))) {
            char character = (char) codePoint;
            int characterWidth = fontMetrics.charWidth(character);
            if (hasFirstCharacterWidth) {
                if (characterWidth != firstCharacterWidth) {
                    isMonospaced = false;
                    break;
                }
            } else {
                firstCharacterWidth = characterWidth;
                hasFirstCharacterWidth = true;
            }
        }
    }
    if (isMonospaced) {
        monospaceFontFamilyNames.add(fontFamilyName);
    }
}
graphics.dispose();                        (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!  | 
                  
