Ширина JLabel всегда возвращает 0 в конструкторе.Тогда, если ширина превышает значение X, вставить разрыв строки? - PullRequest
1 голос
/ 30 ноября 2011

Я создал класс, который расширяет класс JLabel.Этот класс, по сути, делает более «приятным» для меня присоединение соответствующего IconImage к моему JLabel и корректный его размер.

Когда я создаю новый JLabel по коду, я теперь делаю это с помощью * 1003этот код выше, я бы имел конструктор MyClass(String msg, int type) {} на месте.В этом конструкторе я хочу иметь возможность получить ширину текста, указанного пользователем.Если эта ширина превышает определенное значение, скажем, 300px, тогда я бы хотел вставить разрыв строки (по сути, сделав перенос слов в JLabel в соответствии с максимальной шириной).

Я удалилчасть в коде ниже, который добавляет изображение в JLabel, потому что это не имеет отношения к вопросу - я создал отдельный класс для обработки этого, который уже работает.

package org.me.myimageapp;

import javax.swing.JLabel;

/**
 *
 * @author Jordan
 */
public class chatBubble extends JLabel {

public static final int BUBBLE_TO_USER = 1;
public static final int BUBBLE_FROM_USER = 2;

chatBubble(String message, int bubble_type) {
    if ( (bubble_type!=1) && (bubble_type!=2) ) {
        return;
    }

    this.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
    this.setText(message);
    this.setVisible(true);
    System.out.println("WIDTH: "+this.getSize().toString()); //WIDTH: java.awt.Dimension[width=0,height=0]

}

}

Когда я запускаю этот код, онвозвращает "WIDTH: java.awt.Dimension [width = 0, height = 0]", как я поместил в комментариях.

Есть ли способ получить ширину JLabel в конструкторе?Также существует ли способ для JLabel, который позволил бы мне переносить слова?

Ответы [ 2 ]

5 голосов
/ 30 ноября 2011

Размер любого компонента Swing будет равен нулю до тех пор, пока он не будет отрендерен. Вы можете оценить размер текста, используя класс FontMetrics (см. Ссылку на API).

Существуют также клуджи, которые помогут вам перенести слова в JLabel с помощью HTML

Редактировать 1
По вашему вопросу:

Что бы вы предложили, чтобы быть лучшим способом оценить это? Что-то вроде подсчета символов и умножения на среднюю ширину символа?

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

Что касается моего второго решения, пожалуйста, проверьте мой ответ на вопрос здесь: word-wrap-in-jlist-items

2 голосов
/ 30 ноября 2011

Вы можете использовать html, чтобы получить разрыв строки в тексте метки:

"<html>first line <br>second line"

Однако вы не можете получить размер любого компонента свинга в конструкторе.

...