У меня есть a JLabel
в Контейнере. defaut размер шрифта является очень небольшим. Я хотел бы это текст JLabel
взять максимальный размер.
Как я могу сделать это?
Не самый красивый код, но следующий будет подбирать подходящий размер шрифта для 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
, или в какой-либо метод, который будет вызываться, когда шрифт размер необходимо изменить.
Ниже приведен снимок экрана с приведенным выше кодом в действии:
(источник: coobird.net )
label = new JLabel("A label");
label.setFont(new Font("Serif", Font.PLAIN, 14));