FontMetrics sınıfının getWidths() yöntemini kullanabilirsiniz. JavaDoc'u göre:
Yazı Tipi ilk 256 karakter avans genişlikleri alır. Avans, en soldaki noktadan, karakterin taban çizgisindeki en sağdaki noktaya olan mesafedir. Bir String'in ilerlemesinin mutlaka karakterlerinin ilerlemelerinin toplamı olmadığını unutmayın.
Sen FontMetrics sınıfının charWidth(char)
yöntemi kullanabilirsiniz. sadece, bir tek aralıklı yazı tipini ayarlama mantıksal yazı tipi adını kullanmak istiyorsanız Muhtemelen
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();
Eğer örnek kod ekleyebilir miyim bir BufferedImage yapma gerektirmeyen basit bir yöntem? Pratik ve basit bir yaklaşım için – Jonik
+1; Ben kullanıyorum ve m. –