2016-05-26 12 views
2

JTableの列ヘッダーを表示するのは、JScrollPaneコードのどの部分ですか?JScrollPane - JTableヘッダをどのように表示しますか?

JPanelにJTableを追加するだけでは、デフォルトではヘッダーが表示されません。テーブルをJScrollPaneのコンストラクタに渡すか、テーブルを引数としてJScrollPane setViewportViewを呼び出します。実際には、列見出しが表示されるのはなぜですか? JScrollPane(updateUIgetUIメソッド)の内部レンダリングの一部ですか?

最初はJScrollPaneがsetColumnHeaderViewを使ってこれを行うと考えましたが、このメソッドにnullを渡しても、テーブルにはヘッダが表示されます。

答えて

2

JTableはこれを担当します。

addNotify()の方法はJTableです。基本的に、このメソッドは、コンポーネントが可視のコンテナに追加されたときに呼び出されます。

したがって、JTable実装では、テーブルの親がJViewportであるかどうかがチェックされます。その場合は、setColumnHeaderView(...)メソッドを使用してスクロールペインにテーブルヘッダーを追加します。

+0

setColumnHeaderViewを呼び出すと、スクロールペインの列ヘッダーが更新されないという説明がありますか?これは、スクロールペインをインスタンス化し、setViewportViewを使用してJTableを追加した後、JPanelにスクロールペインを追加した後に呼び出されます。私は再塗りつぶしを試みたり、異なるコンポーネントで再検証しましたが、結果はありません。私は別のテーブルを作成し、そこからテーブルヘッダを抽出した後、setColumnHeaderViewに渡しました。変化なし。しかし、setColumnHeaderViewの後にsetViewportView(null)を呼び出すと、スクロールペインに2番​​目のテーブルのヘッダーが表示されます。 – user4205580

+0

@ user4205580、フレームが表示された後、スクロールペインの列ヘッダーを変更できます。私は上記のようにフレームが見えるようになったときにテーブルが列見出しを設定するためです。問題がある場合は、問題を示す[SSCCE](http://sscce.org/)を投稿してください。 – camickr

関連する問題