这里是一个LITTEL SSCCE足见其怪异的滚动行为。 当您启动它,它向下滚动到滚动的底部。 但我想它留在上面。 到目前为止,我发现,这个只有JTextPanes发生,甚至不与JTextArea中。 它,如果你是在美国东部时间也只发生。 从SSCCE取出的invokeLater(),它按预期工作。 然而,这不是一个解决方案(对我来说)。
我也试过了,但没有效果:
final DefaultCaret caret = (DefaultCaret) tp.getCaret();
caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
我要的是一个干净的和通用的解决方案。 因此,我想知道究竟是什么触发了滚动,所以我可以扩展的JTextPane或它使用StyledDocument中的或其他任何东西,以避免在默认情况下。 在我来说,我主要使用不可编辑的,多行文字的JTextPane的,因为它支持文本和不同的字体大小和样式的对齐。 所以,其实我可以放弃的编辑功能,如果我得到,而不是解决了这个问题滚动。 如果可能的话,我不想设定一切都已经加入后ScrollPane的滚动位置,因为我觉得这是一个很糟糕的解决办法。
谢谢你的帮助。 这里是SSCCE:
import java.awt.LayoutManager;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
public class ScrollPaneWithTextPanes
{
public static void main(final String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
final JPanel p = new JPanel();
final LayoutManager layout = new BoxLayout(p, BoxLayout.Y_AXIS);
p.setLayout(layout);
for (int i = 0; i < 10; i++)
{
final JTextPane tp = new JTextPane();
tp.setText("This is some text in text pane " + i);
p.add(tp);
// final DefaultCaret caret = (DefaultCaret) tp.getCaret();
// caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
}
final JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(new JScrollPane(p));
f.setSize(800, 200);
f.setLocation(0, 0);
f.setVisible(true);
}
});
}
}