我有一个 JFrame
里面有 JScrollPane。我在 scrollPane 中有 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);
编辑。
所以我必须为内部 JPanel 设置首选大小。之后 scrollPane 绘制其内容(显示滚动条),因为其内容具有此固定的“内部面板首选大小”。 如果我不为面板设置首选大小,JLabels 将不会换行文本。
在被布局管理器布局后,内部面板的尺寸变大并变得大于先前设置的首选尺寸。面板自行增长,没关系,我在其中看到了标签的包装文本。但是滚动 Pane 的行为不正确。它绘制滚动,因为内部面板仍然是 首选大小 大小。所以我需要 JScrollPane 的正确调整大小行为。
最佳答案
使用
JTextPane or JEditorPane
而不是JPanel
包含一堆JLabels
JTextPane or JEditorPane
支持带样式的文本或Html <= 3.2
对于 Java6理论上您可以使用 JList 而不是 Jlabels,但在这种情况下您必须调用
setPreferredScrollableViewportSize(new Dimension)
与JPanel
相同在JScrollPane
编辑
关于 java 。 Swing 。 JScrollPane 中的多行标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9921831/