Come scoprire se un font è a spaziatura fissa in Java

April 14

La libreria di classi standard per il linguaggio di programmazione Java include il supporto per l'interfaccia grafica utente accede tramite il Abstract Window Toolkit (AWT). Tra le altre astrazioni, AWT consente al codice Java di selezionare diversi tipi di carattere da quelli installati localmente sul computer. Ogni carattere ha una serie di proprietà quali il nome e il peso. In particolare, è possibile determinare se un tipo di carattere è spaziatura fissa (cioè se tutti i personaggi occupano la stessa quantità di spazio orizzontale) testando le proprietà del tipo di carattere in questione dal codice Java soprattutto artigianale.

istruzione

1 Includere la seguente riga all'inizio del vostro codice Java:

import java.awt. *;

2 Inizializzare le seguenti variabili, che verranno utilizzate in seguito per determinare se il font è a spaziatura fissa:

String myFontName = "TimesNewRoman";

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

Grafica = myBI.createGraphics ();

booleano spaziatura fissa = true;

int fontStyle = Font.PLAIN;

int fontSize = 12;

Font myFont = new Font (myFontName, fontStyle, fontSize);

FontMetrics myFontMetrics = graphics.getFontMetrics (myFont);

Sostituire "TimesNewRoman" con il nome del font che si desidera controllare.

3 Determinare se il font è spaziatura fissa da loop su tutte le lettere e le cifre nei bassi 7 bit del punto codice del carattere, mentre tenere traccia di se avete visto più di una larghezza di carattere finora. Il codice di esempio seguente implementa tale algoritmo:

int theWidth = 0;

booleano 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) {

spaziatura fissa = false;

rompere;

}

} altro {

theWidth = currWidth;

theWidthIsDefined = true;

}

}

}

}

Al termine di questo ciclo, variabile "spaziatura fissa" rimarrà vero se e solo se il font selezionato nella fase due è monospazio.