2009-09-30 18 views
5

「No」、「X [mm]」、「Y [mm]」というヘッダーに3列の表があります。この表にはミリメートル単位の点の座標が含まれています。私はインチで座標を表示するためにテーブルを再投入する必要があるかどうかをチェックするチェックボックスを持っています。さらに、列ヘッダーの値は、「いいえ」、「X [in]」、「Y [in]」で​​ある必要があります。JTableの列ヘッダーテキストを動的に変更する

要するに、テーブルのヘッダーテキストを動的に変更したいと思います。

詳細: テーブルはJTableのサブクラスです。さらに、 'DefaultTableModel'のサブクラスがテーブルのモデルとして設定されています。データ型サブクラスのコンストラクタでヘッダ値を提供しました。

私のアプリケーションはjdk v1.4としか互換性がないので、ソリューションがverionと互換性があれば良いでしょう:)

答えて

24

あなたは直接のTableColumnModelを更新することができます。モデルはtableStructureChanged」に変更するまで、あるいは、それだけで動作します原因

JTableHeader th = table.getTableHeader(); 
TableColumnModel tcm = th.getColumnModel(); 
TableColumn tc = tcm.getColumn(0); 
tc.setHeaderValue("???"); 
th.repaint(); 
+0

を使用します"発射される。その後、列のテキストがモデルから再読み込みされます。 –

+3

これが問題の場合は、テーブルが最初に作成された後にtable.setAutoCreateColumnsFromModel(false)を使用できます。 – camickr

+0

+1。よく働く。ありがとう。 – Withheld

2

私はここではテストすることができませんが、このメソッドは「[DefaultTableModel.setColumnIdentifiers(...)][1]」で行います。

基本的には、「DefaultTableModel.getColumnCount()」を実行して、(既にわかっている場合を除いて)いくつの列かを調べます。次に、それぞれの名前を取得するために 'DefaultTableModel.getColumnName(int ColumnIndex)'を実行し、必要な方法でそれを配列に入れます。その後、 'DefaultTableModel.setColumnIdentifiers(...)'を使用してそれらを戻します。

これが役に立ちます。

8

お持ちの場合は、列の数は、そのコードこれは100%のソリューションではありません

jtable.getColumnModel().getColumn(5).setHeaderValue("newHeader"); 
+1

テーブルを更新するコードの後に​​ 'jtable.getTableHeader()。repaint();'を呼び出す必要があります。 – Amin

関連する問題