У меня есть 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.