gpt4 book ai didi

java - 把一个JScrollPane滚动条的bar放在XXX处,不用 "flashing"

转载 作者:行者123 更新时间:2023-11-29 03:42:22 29 4
gpt4 key购买 nike

我正在构建一个 JScrollPane 来设置可滚动的 JPanel,其中包含一个 JTextPane 和一个 JTable

当我加载框架时,我用很长的文本初始化 JTextPane,然后滚动条向下移动直到我的文档结束。

我想把这个滚动条放在文档的顶部。所以我在文本加载后将滚动条的值设置为 0:

SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
myScrollPane.getVerticalScrollBar().setValue(0);
}
});

它工作正常(即我在顶部获得滚动条)但呈现的行为非常难看。现在它加载文本,显示结尾(滚动条位于文本 Pane 底部),然后立即(几毫秒,但仍然可见)向上移动以使滚动条位于顶部。所产生的效果对于用户来说是一种“闪光”,这是非常不愉快的。每次重新加载整个文档时,我都会遇到同样的问题。

我怎样才能避免这种情况?

谢谢。

最佳答案

您可以在更新其内容之后但在创建 JScrollPane 之前简单地将 JTextPane 中的插入符号位置设置为 0。这将强制 JScrollPane 立即显示文本的开头,而不会无意义地向后滚动。

只需做这样的事情:

JTextPane textPane = new JTextPane ();
textPane.setText ( "Some long text here..." );
textPane.setCaretPosition ( 0 );

JScrollPane scrollPane = new JScrollPane ( textPane );

如果您已经有文本 - 只需在 EDT 中一起执行更新和插入符号位置切换:

public static void main ( String[] args ) throws InterruptedException
{
final JFrame frame = new JFrame ();

final JTextPane textPane = new JTextPane ();
frame.add ( new JScrollPane ( textPane ) );

frame.setSize ( 400, 300 );
frame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
frame.setLocationRelativeTo ( null );
frame.setVisible ( true );

Thread.sleep ( 2000 );
SwingUtilities.invokeLater ( new Runnable ()
{
public void run ()
{
textPane.setText ( "line\nline\nline\nline\nline\nline\nline\nline" +
"\nline\nline\nline\nline\nline\nline\nline\nline\nline" +
"\nline\nline\nline\nline\nline\nline\nline\nline\nline" +
"\nline\nline\nline\nline\nline\nline\nline\nline\nline" );
textPane.setCaretPosition ( 0 );
}
} );

Thread.sleep ( 2000 );
SwingUtilities.invokeLater ( new Runnable ()
{
public void run ()
{
textPane.setText ( "line2\nline\nline\nline\nline\nline\nline\nline" +
"\nline\nline\nline\nline\nline\nline\nline\nline\nline" +
"\nline\nline\nline\nline\nline\nline\nline\nline\nline" +
"\nline\nline\nline\nline\nline\nline\nline\nline\nline" );
textPane.setCaretPosition ( 0 );
}
} );
}

但我同意这不是最好的解决方案。我想没有简单的方法可以在内容更改时强制文本 Pane 插入符号为 0。

关于java - 把一个JScrollPane滚动条的bar放在XXX处,不用 "flashing",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12567668/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com