Я создал пользовательский пользовательский интерфейс для JLabel
для поддержки нескольких строк. Это обернет ваш текст в соответствии с доступным пространством, а также с учетом жестких разрывов строк. Обернутый текст должен перерисовываться при изменении размера компонента. Делегат пользовательского интерфейса прослушивает изменения в измерении компонента и автоматически пересчитывает разрывы строк.
Использование делегата пользовательского интерфейса так же просто, как:
JLabel label = new JLabel("Text that'll wrap if necessary");
label.setUI(MultiLineLabelUI.labelUI);
Или альтернативно используйте пользовательский класс MultiLineLabel
, который в дополнение к переносу текста поддерживает вертикальное и горизонтальное выравнивание текста.
Вот проект: https://github.com/sasjo/multiline
Если вы скомпилируете и попробуете демонстрационную версию, она должна хорошо перекомпоноваться в OS X. Если я правильно помню, есть некоторая проблема с перекомпоновкой при изменении размера фрейма в Windows. В то время он не обращал на это внимания, но казалось, что событие с измененным размером никогда не распространялось на метку.