Не самый красивый код, но следующий код подберет подходящий размер шрифта для JLabel
, называемого label
, чтобы текст внутри как можно больше подходил к внутренней части, не переполняя метку:
Font labelFont = label.getFont();
String labelText = label.getText();
int stringWidth = label.getFontMetrics(labelFont).stringWidth(labelText);
int componentWidth = label.getWidth();
// Find out how much the font can grow in width.
double widthRatio = (double)componentWidth / (double)stringWidth;
int newFontSize = (int)(labelFont.getSize() * widthRatio);
int componentHeight = label.getHeight();
// Pick a new font size so it will not be larger than the height of label.
int fontSizeToUse = Math.min(newFontSize, componentHeight);
// Set the label's font size to the newly determined size.
label.setFont(new Font(labelFont.getName(), Font.PLAIN, fontSizeToUse));
В основном код проверяет, сколько места занимает текст в JLabel
, используя объект FontMetrics
, а затем использует эту информацию для определения наибольшего размер шрифта, который можно использовать без переполнения текста из JLabel
.
Приведенный выше код может быть вставлен, возможно, в метод paint
JFrame
, который содержит JLabel
, или в некоторый метод, который будет вызываться, когда необходимо изменить размер шрифта.
Ниже приведен скриншот приведенного выше кода в действии:
альтернативный текст http://coobird.net/img/growing-text.png