如何使文本字体缩小并匹配JTextArea高度?

时间:2017-10-19 04:20:32

标签: java swing jtextarea fontmetrics

我有一个接收文本的JTextArea,但问题是当文本太长而不适合时会出现滚动条。我想要的是自动缩小字体大小以匹配JTextArea高度。 Right now its like this

1 个答案:

答案 0 :(得分:1)

使用以下方法,(根据您的要求更新最大和最小尺寸)

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;
}