2017-10-05 6 views
0

J'ai JFrame avec JTextArea à l'intérieur de celui-ci.Java Get Taille de la police

Font font = new Font("monospaced", Font.PLAIN, 14); 
textarea.setFont(font); 

Étant donné que la police est à espacement fixe, tous les caractères ont la même largeur et hauteur.

Je voudrais savoir quelle est cette largeur et cette hauteur en pixels.

Pour cela, je pourrais utiliser font.getStringBounds mais je n'ai pas de contexte Graphics à lui passer. frame.getGraphics() renvoie null.

Comment puis-je trouver la taille d'un caractère? Peut-il être fait sans instance Graphics? Je ne veux pas d'une instance de toute façon. Je veux juste savoir à quel point mes personnages sont grands.

+0

Votre question n'est pas clair, Pouvez-vous fournir plus d'informations avec une partie nulle de code. –

+0

La "taille" de la police sera basée sur le contexte de la destination du rendu. Généralement, vous voulez regarder 'Graphics # getFontMetrics' ou une méthode similaire. Si vous n'avez pas de contexte 'Graphics' disponible, vous pouvez créer un' BufferedImage' et l'utiliser. La question devient alors: pourquoi voulez-vous cette information? – MadProgrammer

+0

@MadProgrammer merci- Je vais regarder dans 'BufferedImage'. Pour info, j'utilise un 'JFrame' /' JTextarea' pour rendre un jeu basé sur du texte, donc je vais utiliser cette information pour mettre à l'échelle le texte et obtenir les dimensions de la fenêtre en unités de caractères. – Lolums

Répondre

1

Vous pouvez utiliser JFrame#getFontMetrics étant donné que l'un des superclasses de JFrame est Component.

Si cela ne fonctionne pas, vous pouvez également utiliser BufferedImage pour obtenir un objet Graphics:

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

Vous pouvez utiliser l'objet image pour obtenir une instance de Graphics.

+0

Non Je parle de JFrame # getFontMetrics pas de Graphics # getFontMetrics – Dinh

+0

J'ai aussi ajouté une autre façon d'obtenir un objet Graphics puisque vous pensez que ma réponse est fausse – Dinh

+0

Ahh, ma mauvaise! Vous avez raison, cela semble fonctionner. – Lolums

1

Pour votre information, je me sers d'un JFrame/JTextArea pour rendre un jeu basé sur le texte, donc je vais utiliser cette information pour élargir le texte et obtenir les dimensions de la fenêtre en unités de caractères

il est sans doute pas la meilleure approche, il serait préférable de simplement utiliser JTextArea#setColumns et JTextArea#setRows qui utilisera les informations en fonction de la police à prendre des décisions au sujet de sa taille préférée automatiquement

Vous pouvez alors utiliser les LayoutManager API et simplement appeler pack sur la JFrame qui emballera la fenêtre autour du contenu, en fonction de sa taille préférée

Cela affectera également la taille préférée des JScrollPane

+0

Aha , J'ai essayé d'utiliser setRows et setCols mais ils n'ont malheureusement eu aucun effet. – Lolums

+0

* "J'ai essayé d'utiliser setRows et setCols mais ils n'ont malheureusement eu aucun effet" * Ensuite, quelque chose d'autre est faux, et cela devrait être étudié et résolu. –

+0

@Lolums J'ai déjà utilisé cette technique plusieurs fois et ça marche très bien, comme le dit Andrew, si ça ne marche pas, c'est probablement à cause d'autre chose que vous faites – MadProgrammer