2017-10-19 17 views
3

J'ai un JTextArea qui reçoit un texte, mais le problème est quand le texte est trop long il ne rentre pas et la barre de défilement apparaît. Ce que je veux est de réduire automatiquement la taille de la police pour correspondre à la hauteur de JTextArea. Right now its like thisComment faire pour réduire la police de texte et faire correspondre la hauteur de JTextArea?

+0

look pour la classe 'java.awt.FontMetrics', il fera le travail. – aKilleR

+0

* "mais le problème est lorsque le texte est trop long il ne rentre pas et la barre de défilement apparaît" * C'est une fonctionnalité, pas un problème. –

Répondre

1

utilisation ci-dessous la méthode, (mise à jour max et min taille de selon vos besoins)

public static int getMatchingFontSize(JComponent comp, String string) { 
    int minSize = 10; 
    int maxSize = 60; 
    Dimension size = comp.getSize(); 

    if (comp == null || comp.getFont() == null || string.isEmpty()) { 
     return -1; 
    } 
    //Init variables 
    int width = size.width; 
    int height = size.height; 

    Font font = comp.getFont(); 
    int curSize = font.getSize(); 
    FontMetrics fm = comp.getFontMetrics(new Font(font.getName(), font.getStyle(), maxSize)); 
    while (fm.stringWidth(string) + 4 > width || fm.getHeight() > height) { 
     maxSize--; 
     fm = comp.getFontMetrics(new Font(font.getName(), font.getStyle(), maxSize)); 
     curSize = maxSize; 
    } 
    while (fm.stringWidth(string) + 4 < width || fm.getHeight() < height) { 
     minSize++; 
     fm = comp.getFontMetrics(new Font(font.getName(), font.getStyle(), minSize)); 
     curSize = minSize; 
    } 
    if (curSize < minSize) { 
     curSize = minSize; 
    } 
    if (curSize > maxSize) { 
     curSize = maxSize; 
    } 
    return curSize; 
}