所以,我有一个打开文档并显示它的程序。但是,对于显示区域,文档通常很大,所以我添加了一个JScrollPane。由于我将元素添加到显示器的方式,我总是在加载后最终在文档的末尾。我无法改变加载文档的方式,但我想改变加载后JScrollPane的行为方式。
如何强制它突然移到顶部?我尝试使用scrollRectToVisible作为顶级组件,但这不起作用。
有没有一种方法可以让它将它的位置设置为顶部(它只是一个垂直的JScrollpane)?
编辑:我搞砸了,它是JScrollPane,而不是JScrollBar。
EDIT2:
我决定这样做:
myScrollPane.getVerticalScrollBar().setValue(0);
在JFileChooser construcor中:
...
if (returnVal == JFileChooser.APPROVE_OPTION)
{
...
Main.myScrollPane.getVerticalScrollBar().setValue(0);
}
这不起作用。如果我将它移动到我的JMenu对象并添加一个标志,它看起来像这样:
在JFileChooser construcor中:
...
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的一个按钮中,它将完美地工作。
那么,出了什么问题?
答案 0 :(得分:2)
取决于program that opens a document and displays it
必须将Caret
的行为保持为零
必须使用JScrollBar
移动到零值
使用JViewport
移动到(0,0)(scrollRectToVisible for a top component
)
在SSCCE发布后尽快提供更好的帮助,因为这里的答案仅与理论有关
修改
正确地注意到@Joop Eggen
,在大多数情况下需要(view_to_model)包含在SwingUtilities.invokeLater(...)