java 。 Swing 。 JScrollPane 中的多行标签

标签 java swing jscrollpane jlabel multiline

我有一个 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/

相关文章:

java - 禁用滚动到焦点单元格

java - 如何将 Swing 组件从 JFrame 移动到 JScrollPane?

jquery - 每个部分全屏宽度的响应式水平网站

java - 如何在http post请求中插入cypher语句

java - 为什么 Byte.parseByte ("10000001",2) 抛出 NFE?

java - 当其他单元格值更改时禁用 JTable 单元格可编辑

java - 如何查看分层 Pane 内的组件

java - 使用 Java 创建 Web 服务客户端时出错

java - 如何获取实例编号

java - 将 JLabel 旋转 90 度 Java