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

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

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

Не самый красивый код, но следующие будут выбирать подходящий размер шрифта для названного label JLabel , чтобы текст внутри максимально соответствовал внутреннему пространству, не переполнив метку:

 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 JLabel , который содержит JLabel , или какой-либо метод, который будет вызываться, когда размер шрифта должен быть изменен.

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

alt text http://sofru.miximages.com/java/growing-text.png

 label = new JLabel("A label"); label.setFont(new Font("Serif", Font.PLAIN, 14)); 

взято из « Как использовать HTML в компонентах Swing»

  JLabel textLabel = new JLabel(""+Text+""); 

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

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

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

  1. Как написано, на самом деле он продолжает пересчитывать размер шрифта на основе соотношения предыдущего размера шрифта … таким образом, после всего лишь нескольких вызовов он сделал размер шрифта слишком большим. (например, Начните с 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. (Я знаю, что, вероятно, не был намеченным результатом предложенного кода ответа, но поскольку у меня был JLabel HTML-текст на моем JPanel я официально открыл это ограничение. FontMetrics.stringWidth() вычисляет длину текста в том числе ширины тегов html – то есть как просто больше текста)

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

  • Шрифты выглядят по-разному в Firefox и Chrome
  • Как разместить веб-шрифты google на моем собственном сервере?
  • Как установить пользовательский шрифт в заголовке ActionBar?
  • Как импортировать шрифт?
  • Android - Использование пользовательского шрифта
  • CSS Font Border?
  • Можно ли настроить собственный шрифт для всего приложения?
  • Как установить семейство шрифтов по умолчанию для всего Android-приложения
  • Есть ли в Google Chrome «сглаживание шрифтов»?
  • Использование пользовательского (ttf) шрифта в CSS
  • Могу ли я подчеркнуть текст в макете Android?
  • Давайте будем гением компьютера.