JTextArea强制父JScrollPane向下滚动

时间:2016-10-26 13:41:46

标签: java swing focus jscrollpane jtextarea

我在JScrollPane中有一个面板,当从服务接收到数据时,我会动态地使用组件填充面板。该面板使用GridBagLayout(但这应该是无关紧要的)。对于从服务返回的每条记录,我动态创建了几个组件并将它们附加到面板的底部。一切正常,但问题是为每条记录创建的JTextArea强制主JScrollPane向下滚动并显示最后添加的JTextArea,如下所示:

scroll pane forced down

我试图禁用我能想到的所有愚蠢的JTextArea,但仍然没有帮助

JTextArea descriptionArea = new JTextArea(project.getDescription().replace("<br>", "\n"));
descriptionArea.setEditable(false);
descriptionArea.setFont(thumbnailLabel.getFont());
descriptionArea.setLineWrap(true);
descriptionArea.setWrapStyleWord(true);    
descriptionArea.setFocusable(false);
descriptionArea.setRequestFocusEnabled(false);    
DefaultCaret caret = (DefaultCaret) descriptionArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE);

如何阻止它移动滚动条?我尝试用JLabel替换JTextArea并且这样可行,但是我无法让JLabel将文本换行。任何想法都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

Point p = srcollPane.getViewport().getViewPostition();
// add the components to the panel in the viewport of the scrollpane
scrollpane.getViewport().setViewPosition( p );

现在,在添加组件之前,应将滚动窗格重置为其原始位置。