0

我有一个弹出菜单,它在 JScrollPane 中的 JPanel 中显示动态创建的自定义 JPanel 对象。弹出菜单向用户显示推荐,最上面的元素是最相关的推荐。我正在使用 JPopupMenu 来显示窗口:

JPanelTemplatePopup jptep = new JPanelTemplatePopup();
JPopupMenu popup = new JPopupMenu();
popup.add(jptep);
popup.show(this, 500, 100);

问题是,我不能让 JScrollPane 滚动到最顶部的元素以首先显示它。我努力了:

  • .getViewPort().setViewPosition(新点(0,0));
  • .scrollRectToVisible(firstelement.getBounds());

在 validate() 之前和之后。无论我做什么,当窗口弹出时,滚动窗格总是停留在同一个地方。

我什至怀疑在显示窗口之前发生的操作被忽略了,所以我从类中创建并调用了一个公共方法,使窗口在显示后向上滚动。没有改变。

请帮忙,

埃姆雷

4

1 回答 1

0

是的,好吧,找到了解决方法。

我已将问题缩小到自定义 JPanel 对象中的 JEditorPane。它的内容由程序动态更新。在生成对象时,我正在通过他们的 setText 方法设置 JEditorPanes 的内容。通过将文本设置为字符串来更新插入符号位置会强制滚动窗格在下方滚动。

我刚刚将它插入到构造函数中,问题就解决了:

DefaultCaret caret = (DefaultCaret) jEditorPaneContents.getCaret();
caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
于 2010-08-20T19:58:24.213 回答