Джава.Качели.Многострочные метки в JScrollPane - PullRequest
3 голосов
/ 29 марта 2012

У меня есть JFrame с JScrollPane в нем. У меня есть JPanel внутри панели прокрутки. И добавить в него многострочные метки. Все хорошо с многострочными метками. Я заключаю текст в теги <HTML>..</HTML>. А на этикетках отображается завернутый текст.

«...» означает длинный многострочный текст.

Проблема в том, что внизу отображается ненужная область.

JFrame frame = new JFrame();        
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(300, 300));
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
JLabel label1 = new JLabel();
JLabel label2 = new JLabel();
label1.setText("<html>" + "..." + "</html>");
panel.add(label1);
label2.setText("<html>" + "..." + "</html>");
panel.add(label2);
JScrollPane scroll = new JScrollPane(panel);
scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
frame.setContentPane(scroll);
frame.pack();
frame.setVisible(true);

EDIT .

Так что я должен установить предпочтительный размер для внутренней JPanel. После этого scrollPane рисует свое содержимое (показывает полосы прокрутки), так как его содержимое имеет фиксированный «предпочитаемый размер внутренней панели». Если я не установлю предпочтительный размер для панели, JLabels не будет переносить текст.

После того, как менеджер раскладки выложил, размер внутренней панели увеличивается и становится больше, чем ранее установленный предпочтительный размер. Панель растет сама по себе, все нормально, я вижу в ней завернутый текст меток. Но прокрутка ведет себя неправильно. Он рисует свиток, поскольку внутренняя панель по-прежнему имеет размер prefferred size . Поэтому мне нужно правильное поведение изменения размера для JScrollPane.

1 Ответ

3 голосов
/ 29 марта 2012
  • использование JTextPane or JEditorPane вместо JPanel содержит набор JLabels

  • JTextPane or JEditorPane с поддержкой стилизованного текста или Html <= 3.2 для Java6

  • теоретически вы можете использовать JList вместо Jlabels, но в этом случае вы должны вызвать setPreferredScrollableViewportSize(new Dimension), как и для JPanel в JScrollPane

РЕДАКТИРОВАТЬ

...