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




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);
Хорошо, теперь я использую этот код, но у меня все еще есть одна проблема. Мой текст по-прежнему слишком широк, а отсутствующие части заменены на "..."
@ xX4m4zingXx Затем, предположительно, вы вручную устанавливаете размер родительского контейнера и не позволяете менеджерам компоновки выполнять свою работу
Это правда, я использую нулевой макет, потому что, на мой взгляд, его проще использовать, и я могу заставить мой фрейм выглядеть так, как я хочу, но не в этом случае: p
GridLayout в JPanel с EmptyBorder, поместив эту панель в LINE_START из BorderLayout.
Кстати - если проблема заключается в размещении текста на значке, и «Рейтинг», и «Голосовать за» (?) Можно разделить на две строки. OTOH Я бы 1) использовал для этого реальные кнопки (JButton), 2) использовал бы только значки и установил текст как всплывающую подсказку.
А ладно, попробую сделать эти кнопки по раскладке. Также я использую этот текст для эффекта наведения. Я хочу, чтобы значок постепенно потемнел, а затем появился текст, поэтому я не хочу использовать всплывающие подсказки. Я все еще мог бы поставить его на 2 строчки, хотя
Дело в том, что я хочу использовать отличные шрифтовые иконки, потому что их легко раскрашивать и изменять размер.