Подтвердить что ты не робот

Как изменить размер шрифта JLabel, чтобы взять максимальный размер

У меня есть JLabel в контейнере. Размер шрифта по умолчанию очень маленький. Я бы хотел, чтобы текст JLabel занимал максимальный размер.

Как я могу это сделать?

4b9b3361

Ответ 1

Не самый красивый код, но следующий код подберет подходящий размер шрифта для 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 font size to the newly determined size.
label.setFont(new Font(labelFont.getName(), Font.PLAIN, fontSizeToUse));

В основном код JLabel занимает текст в JLabel, используя объект FontMetrics, а затем использует эту информацию, чтобы определить наибольший размер шрифта, который можно использовать, не переполняя текст из JLabel.

Приведенный выше код может быть вставлен, возможно, paint методом в JFrame, который удерживает JLabel, или какой - то метод, который будет вызываться, когда размер шрифта должен быть изменен.

Ниже приведен скриншот приведенного выше кода в действии:

alt text
(источник: coobird.net)

Ответ 3

 JLabel textLabel = new JLabel("<html><span style='font-size:20px'>"+Text+"</span></html>");

Ответ 4

Исходный код для ярлыка - Как изменить цвет и шрифт (в Netbeans)

jLabel1.setFont(new Font("Serif", Font.BOLD, 12));


jLabel1.setForeground(Color.GREEN);

Ответ 5

Просто хотел указать, что принятый ответ имеет пару ограничений (которые я обнаружил, когда я пытался его использовать)

  • Как написано, на самом деле он продолжает пересчитывать размер шрифта на основе соотношения размера шрифта предыдущего... таким образом, после всего лишь нескольких вызовов он сделал размер шрифта слишком большим. (например, Начните с 12 пунктов в качестве вашего DESIGNED Font, разметьте метку всего на 1 пиксель, а опубликованный код рассчитает размер шрифта как 12 * (скажем) 1.2 (отношение поля к тексту) = 14,4 или 14 точечный шрифт. Еще 1 пиксель и звонок, и вы на 16 пунктов!).

Таким образом, он не подходит (без адаптации) для использования в настройке повторного вызова (например, ComponentResizedListener или пользовательский/измененный LayoutManager).

Перечисленный код эффективно принимает начальный размер 10 pt, но относится к текущему размеру шрифта и поэтому подходит для вызова один раз (чтобы установить размер шрифта при создании метки). Он работал бы лучше в среде с несколькими вызовами, если бы он int newFontSize = (int) (widthRatio * 10);, а не int newFontSize = (int)(labelFont.getSize() * widthRatio);

  1. Поскольку для создания нового шрифта он использует new Font(labelFont.getName(), Font.PLAIN, fontSizeToUse)), у него нет поддержки для Bolding, Italic или Color и т.д. из исходного шрифта в обновленном шрифте. Было бы более гибким, если бы вместо этого использовалось labelFont.deriveFont.

  2. Решение не поддерживает HTML-метку Text. (Я знаю, что, вероятно, не был намеченным результатом предложенного кода ответа, но поскольку у меня был HTML-текст JLabel на моем JPanel, я официально открыл ограничение. FontMetrics.stringWidth() вычисляет длину текста как включительно ширины html-тегов, т.е. как просто больше текста)

Я рекомендую посмотреть ответ на этот вопрос SO, где ответ trashgod указывает на несколько разных ответов (включая этот) на почти идентичный вопрос. На этой странице я дам дополнительный ответ, который ускоряет один из других ответов в 30-100 раз.