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



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



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

661   5  

5 ответов:

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

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

alt текст http://coobird.net/img/growing-text.png

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

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

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

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

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


jLabel1.setForeground(Color.GREEN);

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

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

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

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

  1. потому что он использует new Font(labelFont.getName(), Font.PLAIN, fontSizeToUse)) чтобы создать новый шрифт, нет поддержки полужирного, курсивного или цветного и т. д. Из исходного шрифта в обновленном шрифте. Было бы более гибким, если бы он использовал labelFont.deriveFont вместо.

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

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

Comments

    Ничего не найдено.