Hvordan finne ut om en font er monospace i Java

Standarden klassebibliotek for Java programmeringsspråk inkluderer støtte for et grafisk brukergrensesnitt tilgjengelig gjennom Abstract Window Toolkit (AWT). Blant andre abstraksjoner, kan AWT Java-kode for å velge forskjellige skrifttyper fra de lokalt installert på datamaskinen. Hver font har et sett med egenskaper som navn og vekt. Spesielt kan du avgjøre om en font er monospace (det vil si, hvis alle tegnene okkupere samme mengde plass vannrett) ved å teste egenskapene til skriften i spørsmålet fra spesielt utformet Java-kode.

Bruksanvisning

1 Ta med følgende linje i begynnelsen av Java-kode:

importere java.awt. *;

2 Initial følgende variabler, som vil bli brukt senere for å finne ut om skriften er monospace:

String myFontName = "TimesNewRoman";

BufferedImage myBI = ny BufferedImage (1, 1, BufferedImage.TYPE_INT_ARGB);

Grafikk Grafikk = myBI.createGraphics ();

boolean monospace = true;

int fontStyle = Font.PLAIN;

int fontstørrelse = 12;

Font myFont = ny font (myFontName, fontStyle, fontstørrelse);

FontMetrics myFontMetrics = graphics.getFontMetrics (myFont);

Erstatt "TimesNewRoman" av navnet på skriften du ønsker å sjekke.

3 Finn ut om skriften er monospace ved looping over all bokstaver og tall i nedre 7 biter av skriftkodepunkt samtidig holde styr på om du har sett mer enn en karakter bredde så langt. Følgende eksempelkode implementerer at algoritmen:

int theWidth = 0;

boolean theWidthIsDefined = false;

for (int charCode = 0; charCode <128; charCode ++) {

if (Character.isValidCodePoint(charCode) && (Character.isLetter(charCode) || Character.isDigit(charCode))) {

char currChar = (char) charCode;

int currWidth = myFontMetrics.charWidth (currChar);

if (theWidthIsDefined) {

if (currWidth! = theWidth) {

monospace = false;

gå i stykker;

}

} Else {

theWidth = currWidth;

theWidthIsDefined = true;

}

}

}

}

På slutten av denne sløyfen, variabel "monospace" vil forbli sann hvis og bare hvis skriften valgt i trinn to er breddefaste.