0

JScrollPaneのJPanelに動的に作成されたカスタムJPanelオブジェクトを表示するポップアップメニューがあります。ポップアップメニューにはユーザーへの推奨事項が表示され、一番上の要素が最も関連性の高い推奨事項です。JPopupMenuを使用してウィンドウを表示しています。

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()の前後。私が何をしても、ウィンドウがポップアップすると、スクロールペインは常に同じ場所にとどまります。

ウィンドウを表示する前に行われた操作が無視されているのではないかと思ったので、クラスからパブリックメソッドを作成して呼び出し、表示後にウィンドウを上にスクロールさせました。何も変わっていません。

助けてください、

エムレ

4

1 に答える 1

0

ええ、まあ、これの回避策を見つけました。

問題をカスタムJPanelオブジェクトにあるJEditorPaneに絞り込みました。その内容は、プログラムによって動的に更新されました。オブジェクトの生成中に、setTextメソッドを使用してJEditorPanesのコンテンツを設定していました。テキストを文字列に設定してキャレットの位置を更新すると、スクロールペインが下にスクロールします。

これをコンストラクターに挿入したところ、問題が修正されました。

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