2010-11-19 11 views
0

私はJFrameを持っていて、その内部にJScrollPaneがあり、JScrollPaneの中にJPanelがあります。 JScrollPane内のJPanelを変更するボタンクリックマウスリスナーがあります。マウスリスナーのコードは次のとおりJFrameのサイズを変更した後にのみビューを更新する

@Override 
    public void mouseClicked(MouseEvent arg0) { 

      searchResult.updateInfo(); 

     } 

updateInfoは、検索結果のJPanel内のJPanelの束を追加して方法。このリスナーに関連付けられたボタンをクリックすると、何も起こりませんが、JFrameのサイズを変更すると、ビューが更新されます。なぜこれがですか?

私はJFrameのを再描画しようとしたが、それはそれはあなたが必要とする目に見えるGUIからコンポーネントを追加/削除した後、この searchResult.removeAll(); searchResult.updateInfo(); searchResult.validate(); searchResult.repaint();

答えて

2

ようにするに動作しない場合

+0

LayoutManagerは、コンポーネントのレイアウト方法についての最初のレンダリング時にのみ尋ねられるからです。ここで説明したように、 'revalidate()'を呼び出すことによってLayoutManagerにこれを再度依頼するようにコンポーネントに指示する必要があります。 – ZeissS

+0

ありがとう!これは私の問題を解決した – aherlambang

0

searchResult.removeAll(); searchResult.updateInfo(); searchResult.validate(); を作る私の問題を解決しませんでした優先サイズを再計算できるようにコンポーネントをレイアウトするようにパネルに指示します。あなたは追加する必要があります。

searchResult.revalidate(); 
searchResult.repaint(); // sometimes needed 

次に推奨サイズが表示されますスクロールのスクロールバーのサイズよりも大きい場合。

+0

申し訳ありません、私は上記のコードを更新しています。私が本当に欲しいのは私のmouseClickedだけです。searchResultでupdateInfoを呼び出すだけです。上記で説明したように、このメソッドはパネルの束を追加します。searchResult JPanel – aherlambang

+0

問題なし重要なのは、UU問題、幸運を解決したことです。 – palAlaa

関連する問題