JLabel в GridBagLayout. Как исправить ширину? - PullRequest
4 голосов
/ 16 ноября 2011

У меня очень простой JLabel с довольно длинным текстом.
Родительским макетом является GridBagLayout.
Я хочу, чтобы ширина содержащего кадра не превышала определенного значения, скажем, 160 пикселей.
Поэтому я установил текст как «html», чтобы JLabel мог переносить текст в несколько строк.
Теперь я просто хочу "исправить" ширину JLabel. Но я не нашел способ.
Максимальный размер Jframe, JLabel не проверяется менеджером макета, поэтому я не знаю, есть ли «простое» решение.

Очень простой пример (просто исправьте импорт для запуска) показывает ситуацию.

public class SSCE extends JFrame {

    public static void main(String [] args) {
        new SSCE().setVisible(true);
    }

    public SSCE() {

        setLayout(new GridBagLayout());

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.weightx = 1;
        gbc.weighty = 1;
        gbc.fill = GridBagConstraints.BOTH;

        JLabel label = new JLabel("<html>one two three four five six seven eight nine ten eleven twelve thirteen");
        add(label, gbc);

        gbc.gridy=1;
        JLabel label2 = new JLabel("other content");
        add(label2, gbc);

        pack();

    }

}

Ответы [ 3 ]

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

Попробуйте указать ширину в HTML, например:

String html = 
    "<html><body width='150px'>" +
    "Some content that will span 150 pixels and then line-wrap as necessary" +
    "</body></html>";
new JLabel( html );

Обратите внимание, что в этом примере я указал пиксели (150px), но ширину тела HTML можно указать другими способами.

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

Был похожий вопрос: "сделайте JLabel обернуть его текст, установив максимальную ширину"

И этот ответ кажется правильным: JLabel Max Width Ответ

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

Возможно, попробуйте использовать prefered и maximum размеры для JLabel?

...