Текст java JLabel превышает ширину родительской JLabel

У меня есть класс под названием iconLabel, который расширяет JLabel для создания кнопок. Я использую шрифт Font Awesome, чтобы установить для текста JLabel значок. Я также добавляю еще один JLabel к этому объекту iconLabel в конструкторе для отображения текста на значке. Проблема в том, что текст на значке превышает ширину значка, поэтому вы получите «...». Как я могу сделать так, чтобы текст JLabel мог превышать ширину значка? Вот изображение для пояснения.

Текст java JLabel превышает ширину родительской JLabel

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
109
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

The problem is that the text on the icon exceeds the width of the icon, so you'll get "...".

JLabel может отображать значок с текстом, нарисованным поверх значка. Для этого не нужен специальный класс.

Базовый код:

JLabel label1 = new JLabel( new ImageIcon(...) );
label1.setText( "Easy Way" );
label1.setHorizontalTextPosition(JLabel.CENTER);
label1.setVerticalTextPosition(JLabel.CENTER);

The thing is that I want to use the font awesome icons

Итак, вы используете метод setText () и получаете нарисованный значок? Прохладный!

Возможно, вы сможете использовать JPanel с OverlayLayout. Затем вы добавляете две метки к панели, убедившись, что значения alignmentX / Y равны 0,5f, чтобы компоненты были центрированы на панели. Теперь панель должна быть размером с самую большую этикетку.

Или, может быть, вы можете использовать Значок текста. Этот класс позволяет создавать значок из текстовой строки. Вам все равно понадобятся этикетки, но размер должен работать правильно.

Код должен быть примерно таким:

JLabel iconLabel = new JLabel();
iconLabel.setFont(...);
TextIcon icon = new TextIcon(iconLabel, "...")
Jlabel label = new JLabel("some text");
label.setIcon(icon);

Дело в том, что я хочу использовать отличные шрифтовые иконки, потому что их легко раскрашивать и изменять размер.

RuuddR 24.03.2018 21:54

Хорошо, теперь я использую этот код, но у меня все еще есть одна проблема. Мой текст по-прежнему слишком широк, а отсутствующие части заменены на "..."

RuuddR 24.03.2018 22:49

@ xX4m4zingXx Затем, предположительно, вы вручную устанавливаете размер родительского контейнера и не позволяете менеджерам компоновки выполнять свою работу

MadProgrammer 24.03.2018 23:44

Это правда, я использую нулевой макет, потому что, на мой взгляд, его проще использовать, и я могу заставить мой фрейм выглядеть так, как я хочу, но не в этом случае: p

RuuddR 24.03.2018 23:52
"Я использую нулевой макет, потому что его проще использовать ..." И все же это приводит к принципиально сломанному графическому интерфейсу - как этот. «Не использовать макеты» - это первое, что нужно исправить. Такое расположение значков, показанное выше, может быть достигнуто с помощью одного столбца GridLayout в JPanel с EmptyBorder, поместив эту панель в LINE_START из BorderLayout.
Andrew Thompson 25.03.2018 01:15

Кстати - если проблема заключается в размещении текста на значке, и «Рейтинг», и «Голосовать за» (?) Можно разделить на две строки. OTOH Я бы 1) использовал для этого реальные кнопки (JButton), 2) использовал бы только значки и установил текст как всплывающую подсказку.

Andrew Thompson 25.03.2018 01:20

А ладно, попробую сделать эти кнопки по раскладке. Также я использую этот текст для эффекта наведения. Я хочу, чтобы значок постепенно потемнел, а затем появился текст, поэтому я не хочу использовать всплывающие подсказки. Я все еще мог бы поставить его на 2 строчки, хотя

RuuddR 25.03.2018 21:13

Другие вопросы по теме