2011-01-26 6 views
1

私はカスタムスイングコンポーネントを構築しています。カスタムスイングコンポーネント:repaint()の問題

再ペイントに問題があります。私のコンポーネントは、jtreejtableがあり、その後、完全にカスタムペイントされている部分は、(うまく行けばあることを終わるかなりMSプロジェクト風ganttview)

特定の問題があることJTreeには、テーブルとガントを展開するとき新たに展開されたtreenodeの下にある新しいサブプロジェクトを反映するためにビューを更新する必要があります。彼らはこれを行うが、サイズは更新されないので、テーブルには追加の行が表示されず、私のganntディスプレイはフルハイトを使い切っていない。

奇妙なことは、jframeのウィンドウハンドルに触れると(これも1ピクセルのサイズ変更さえ) - これは完全な更新を強制して、コンポーネントが正しく表示されているように見えます。右はディスプレイを埋める。

私がサイズ変更をしないと、ツリーのノードが拡大/縮小されたときに再描画が呼び出されます。これはganttviewの更新が表示されているためですが、スクリーン。

下のスクリーンショットは、resize()の後に正しい表示を示し、下半分は、サイズ変更を行わずにノードを展開すると表示されます。

私は、コンポーネントがサイズ変更時に正しいことを行うので、コンポーネント自体を正しくrepaint()する方法を知っていると主張していますが、これにより完全なリフレッシュを強制する特別なイベントが発生する必要があります。 update()、invalidate()、repaint()のさまざまな組み合わせを試しましたが、親フォームのサイズを変更したときに発生する完全なrepaint()をエミュレートすることはできません。

Screenshot

おかげで、エース

答えて

1

奇妙なことは、私は(そうであっても1ピクセルのサイズ変更)のJFrameのウィンドウハンドルに触れた場合ということである - これは完全リフレッシュおよびコンポーネントを強制的に思えます

フレームのサイズが変更されると、コンポーネントの再検証と再描画が行われます。だからあなたのコードのどこか(テーブルとganntビューが更新されたところ)を追加する必要があります:

customComponent.revalidate(); 
customComponent.repaint(); 
+0

多くありがとう、これはトリックをしました – phatmanace

関連する問題