Swing 区域内的垂直对齐

Swing 区域内的垂直对齐,swing,Swing,对于如何显示消息列表,我有一个非常具体的要求。每条消息最多可包含3200个字符。对于消息的这种特殊显示,只显示每一行的前两行,以原始格式(制表符、空格、换行符)显示消息的任何内容。消息将包含在JInternalFrame中。当用户拖动帧的一侧以增加或减少其宽度时,消息的可见文本应随帧增加或减少,不需要水平滚动条 我能够通过以下方法获得所需的行为,即文本随着框架宽度的增加/减少: JTextArea ta = new JTextArea(); ta.setLineWrap(true); ta.se

对于如何显示消息列表,我有一个非常具体的要求。每条消息最多可包含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);
滚动窗格列表添加到JScrollPane中,在JInternalFrame中有一个垂直滚动条,但没有水平滚动条


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

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

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

        DefaultCaret c = new DefaultCaret();
        c.setUpdatePolicy( DefaultCaret.NEVER_UPDATE );
        ta.setCaret( c );

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

textArea.setCaretPosition(0);

没什么区别