Test whether the font is first-class in Java
•
Java
I'm listing all the constant width fonts available on the user's machine I can get all fonts in swing in the following ways:
String[] fonts = GraphicsEnvironment.getLocalGraphicsEnvironment() .getAvailableFontFamilyNames();
Is there any way to figure out what is uniform?
Thank you in advance
Solution
You can use the getwidths () method of the fontmetrics course According to Javadoc:
You can use the charwidth (char) method of the fontmetrics class For example:
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();
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码