1

所以,我有一个程序可以打开一个文档并显示它。但是,文档对于显示区域来说通常很大,所以我添加了一个 JScrollPane。由于我将元素添加到显示的方式,加载后我总是在文档末尾结束。我无法更改加载文档的方式,但我想更改 JScrollPane 在加载后的行为方式。

如何强制它卡到顶部?我尝试使用 scrollRectToVisible 作为顶级组件,但没有奏效。

有没有一种方法可以让它将它的位置设置为顶部(它只是一个垂直的 JScrollpane)?

编辑:我搞砸了,它是 JScrollPane,而不是 JScrollBar。

编辑2:

我决定这样做:

myScrollPane.getVerticalScrollBar().setValue(0);

在 JFileChooser 构造函数中:

...
if (returnVal == JFileChooser.APPROVE_OPTION)
{
...
Main.myScrollPane.getVerticalScrollBar().setValue(0);
}

那是行不通的。如果我将它移动到我的 JMenu 对象并添加一个标志,它看起来像这样:

在 JFileChooser 构造函数中:

...
if (returnVal == JFileChooser.APPROVE_OPTION)
{
...
Main.flag = true;
}

在 JMenu 构造函数中:

...
someJMenuItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
new MyJFileChooser();
if (Main.flag)
{
Main.myScrollPane.getVerticalScrollBar().setValue(0);
Main.flag = false;
}
}
}

这也不起作用,但我知道 if 命令中的代码正在执行。

如果我附加 Main.myScrollPane.getVerticalScrollBar().setValue(0); 到 JMenu 中的一个按钮,它将完美地工作。

那么,怎么了?

4

1 回答 1

2
  1. 取决于program that opens a document and displays it必须保持Caret位置为零

  2. 必须移动JScrollBar到零值

  3. 移动JViewport到 (0, 0) ( scrollRectToVisible for a top component)

  4. 为了获得更好的帮助,请尽快发布 SSCCE,因为这里的答案仅与理论有关

编辑

正如@Joop Eggen正确注意到的那样,在大多数情况下需要 (view_to_model) 包裹在SwingUtilities.invokeLater(...)

于 2012-11-05T14:53:39.180 回答