2011-08-16 6 views
4

私はSwingを初めて使用していて、今日JTableコンポーネントに苦労しています。私は幾分空想的なテーブルを作ろうとしているので、私はまだどこでも探している特定の答えを見つけることができませんでした。JTableヘッダーとスペーサー行

テーブルの最上部にヘッダーの「グループ」がありたいと思います。これは、テーブル全体にまたがる3つまたは4つの行を意味し、さまざまな列を「グループ化」して本質的にそれらを分割します。

例(眼精疲労を容赦):

スラッシュ( "/")が空白を示す
////////////////////////////////ANIMALS////////////////////////// 
/////////Mammals///////////////////////Rodents/////////////////// 
////People/////Dogs//////////Rats/////Rodents of Unusual Size//// 

。 「ANIMALS」と題された最初のヘッダーは、表のすべての列を参照します。 2番目のヘッダーは、ANIMALSなどのパーティションを作成します。最後の3番目のヘッダーの後に、各行に4つの列があり、それぞれの種類のAnimalに1つの実際の表が届きます。

明らかに、これは例であり、おそらくは悪い例ですが、これは私が「ヘッダを分割する」という意味です。

私の質問: 私はJTableHeaderですとのTableColumnModelがこの機能をサポートしてどのように表示されません。もしそうなら、誰かが私を正しい方向に向けることができますか?もしそうでなければ、これはSwingアプリがこのようなものを必要とするのは初めてではありません。誰でも知っているサードパーティのコンポーネントですか?

また、「Spacer」またはSpanning Rowsをテーブル全体に散りばめて、一連の行を表すことができるようにしたいと考えています。これらのスペーサーは、ヘッダーのような表の上部にはなく、表の内側に存在しますが、すべての列にまたがり、後続の行で表されるグループの名前を表す単一のラベルを持ちます。繰り返しますが、スイングはこれをサポートしていません。

ありがとうと私は本当にひどい例/図面をお詫び申し上げます。

答えて

1

デフォルトでは、JTableにはヘッダーの行が1つしかありません(JTableHeaderのJTableの行が正しくありません)。とにかく、最初のn個の非ヘッダー行をヘッダーのように表示するTableCellRendererを実装することができます。

  1. ヘッダーのセル

などのような所望の行のJTableののセルをordinar表示するTableCellRendererをを実装:

public Component getTableCellRendererComponent(JTable table, Object value, 
    boolean isSelected, boolean hasFocus, int row, int column){ 

    this.setOpaque(true); 
    TableCellRenderer renderer = table.getTableHeader().getDefaultRenderer(); 
    return renderer.getTableCellRendererComponent(table, value, isSelected, 
      hasFocus, row, column); 
} 
  1. 手順は、次のより鉱石が少ないですJTableを拡張し、次のメソッドを実装して戻すdesideredセルレンダリング:あなたの要件にとにかく

    public TableCellRenderer getCellRenderer(int row, int column){} 
    

は解決するという問題がある:JTableは、列の固定数を持っているので、あなたはその結果をachiveする回避策を見つけなければなりません。

+0

ヘッダに影響を与えるが、あなたは 'table.getTableHeader()を使用しません。setDefaultRenderer()'? – trashgod

+0

私に野生の推測のように見える - またはあなたは本当にそれを試しました;-) – kleopatra

+0

@kleopatra:私は本当に何かを試してみました。 – Heisenbug

1

セル(行/列の両方)のグループ化または分割は、コアスイングではサポートされず、ヘッダーやテーブル自体に対してもサポートされません。設計によるJTableはではなく、汎用グリッドです。グリッドのような振る舞いやビジュアルを調整しようとすると、そのデザインと戦うことになります。できますが、達成するのは簡単ではありません。 @トラッシュゴッドは、それらの戦いのいくつかを指摘しています(彼らはまだ働いていますか?彼らは古くからの第一世代のタメの例のように見えます)。 A JIDEはそれをサポートする商用製品です(免責事項:決して生産に使用されません:-)

+0

匿名のダウン投票者、あなたの理由は何ですか? – kleopatra