1

关于如何显示消息列表,我得到了非常具体的要求。每条消息最长可达 3200 个字符。对于这种特定的消息显示,只显示每条消息的前两行,以完整的原始格式(制表符、空格、换行符)显示任何适合的消息。消息将包含在 JInternalFrame 中。当用户拖动框架的一侧以增加或减少其宽度时,消息的可见文本应该随着框架增加或减少,不需要水平滚动条。

我能够通过使用以下内容随着框架的宽度增加/减少文本来获得所需的行为:

JTextArea ta = new JTextArea();
ta.setLineWrap(true);
ta.setWrapStyleWord(true);
ta.setRows(2);
ta.setEditable(false);
ta.setOpaque(false);
ta.setText(longString());
ta.setAlignmentY(TOP_ALIGNMENT);
JScrollPane scrollPane = new JScrollPane(ta);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

将滚动窗格列表添加到具有垂直滚动条但在 JInternalFrame 中没有水平滚动条的 JScrollPane。

我遇到的问题是文本位于 JTextArea 的底部,因此用户看到的是消息的最后两行,而不是前两行。似乎可以设置水平对齐,但不能设置垂直对齐。有没有办法让顶部的文本对齐自动扩展/收缩文本?

4

2 回答 2

1

将文本加载到文本区域后,您可以使用:

textArea.setCaretPosition(0);
于 2013-07-15T22:03:24.847 回答
1

这也是过去困扰我的事情。它与 JTextComponents 如何与 JScrollPanes 交互有关 - 具体来说,有一个(不可见,当不可编辑时)插入符号,它最终出现在 JTextComponent 的末尾。当视口试图找出它应该查看的内容时,它会查看插入符号。

因此,告诉 JTextArea 在初始化块期间不要移动插入符号:

        DefaultCaret c = new DefaultCaret();
        c.setUpdatePolicy( DefaultCaret.NEVER_UPDATE );
        ta.setCaret( c );
于 2013-07-15T04:02:46.870 回答