基本的には、私のJTableは各行に対して特殊な行高さを求めています。使用される各レンダラーは、各セルの要求された行高さを表内のマップに書き込みます。表には、マップを使用して行高さを設定するメソッドupdateRowHeights
があります。問題は、行高さのマップがレンダラーによって高さで満たされていることです。したがって、最初にテーブルがレンダリングされると、マップはまだ空です。したがって、表が最初に表示されるとき、行の高さは設定されません。JTableがレンダリングされた後にメソッドを呼び出す:onRenderFinishedイベントはありますか?
私はテーブルにコンポーネントのリスナーを追加して行の高さを更新しています。ほとんどの場合、これはうまく動作しますが、たとえば、テーブルがタブ区画内のスクロールペインにあるときは呼び出されません。好ましくは、onRenderingFinished
のようなメソッドがあり、row-heightsメソッドを呼び出すことができます。
私はHow to set the RowHeight dynamically in a JTableという最初の答えのようなことをしています。レンダラ内からテーブルの行の高さを変更しないでください(私はそれに同意します)。そして、初期化が完了した後、そしてそれが依存している状態のいずれかがかわった。"
私の質問は:どこでupdateRowHeight
に電話しますか?
レンダラが終了したことを通知するイベントはありますか?
これはすばらしい回避策です。しかし、JTextAreaをベースとして(JLabelの代わりに)、getPreferredSize()メソッドは期待どおりに動作せず、代わりに使用するメソッドは非常に高速ではありません(20000行テーブルでは数秒です)。第2に、updateRowHeightメソッドは、別の列でテーブルをソートした後にも呼び出さなければなりません。私の場合、いくつかのcomponentEventのrowheightsを更新し、レンダラーの高さをあらかじめ計算するのはずっと高速です。 (しかし、醜いです...そして、セルが変更可能な場合、componentEventウェイは使用不可能になります) –
また、レンダリングの後に当然存在しない場合(例えば、行が追加、削除、変更された場合など) 、並べ替え)。このソリューションはあまり時間効率的ではないので、残念ながら私の問題は解決しません(JTextAreaセルがない場合でさえも)。 –
あなたの問題を理解できるように、[SSCCE](http://sscce.org)を入力してください。もちろん、JTextAreaでは、JTextAreaが高さを決定するために少なくとも固定幅を必要とするため、このアプローチは機能しません。大規模な表に対しては、小さな表またはパネルにプレーン・テキスト・ラベルの構成を持つHTMLラベルを使用できます。 –