2010-08-10 39 views
0

我有一個彈出菜單,它顯示了JScrollPane中一個JPanel中動態創建的自定義JPanel對象。彈出菜單向用戶顯示建議,最上面的元素是最相關的建議。我使用的JPopupMenu顯示窗口:在彈出窗口中的JScrollPane不能以編程方式向上滾動

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

的問題是,我不能讓JScrollPane的滾動到最頂端的元素先顯示它。我曾嘗試過:

  • .getViewPort().setViewPosition(new Point(0,0));
  • .scrollRectToVisible(firstelement.getBounds());

validate()s之前和之後。不管我做什麼,當窗口彈出時,滾動窗格總是停留在同一個地方。

我甚至懷疑在顯示窗口之前發生的操作被忽略了,所以我創建並從類中調用了一個公共方法來使窗口在顯示後滾動。沒有改變。

請幫幫忙,

埃姆雷

+0

我認爲這是類似於一個競爭狀態。 顯示彈出窗口後,滾動條需要更新*。我想我需要找到一種在完全顯示彈出窗口時觸發動作的監聽器。 – Emre 2010-08-17 09:42:29

回答

0

是啊,找到了解決方法這一點。

我已經將問題縮小到自定義JPanel對象中的JEditorPane。其內容由程序動態更新。在生成對象時,我通過setText方法設置了JEditorPanes的內容。通過將文本設置爲字符串來更新插入符位置,迫使滾動窗格在下面滾動。

我剛插入這構造和問題得到了解決:

DefaultCaret caret = (DefaultCaret) jEditorPaneContents.getCaret(); 
caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE); 
相關問題