2009-09-30 40 views
5

我有一個包含3列的表格,它們在標題中包含以下值:'No.','X [mm]','Y [mm]'。該表格包含以毫米爲單位的點的座標。我有一個複選框來檢查表格應該重新填充以顯示英寸的座標。此外,列標題值應該是:'否','X [輸入]','Y [輸入]'。動態更改JTable中的列標題文本

總之我想動態地改變表格的標題文本。

詳細信息: 該表是JTable的子類。此外,「DefaultTableModel」的子類已被設置爲表的模型。我在datamodel子類的構造函數中提供了標頭值。

有什麼想法?我的應用程序只與jdk v1.4兼容,所以如果解決方案與版本兼容,這將是一件好事。:)

回答

24

您可以直接更新的TableColumnModel:

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

這是不是100%的解決方案的原因,直到模式發生改變或「tableStructureChanged它只能「被解僱。然後,列文本將從模型中重新讀取。 – 2009-09-30 12:40:23

+3

如果這是一個問題,可以在最初創建表 – camickr 2009-09-30 19:08:12

+0

+1後使用table.setAutoCreateColumnsFromModel(false)。很棒。謝謝。 – Withheld 2013-03-04 13:20:19

2

我不能在這裏測試,但熟悉這種方法'[DefaultTableModel.setColumnIdentifiers(...)][1]'應該做你想做的。

基本上,你運行'DefaultTableModel.getColumnCount()'找出有多少列(除非你已經知道)。然後運行'DefaultTableModel.getColumnName(int ColumnIndex)'來獲取每個的名稱,按照你想要的方式改變它,並把它放在一個數組中。之後,您使用'DefaultTableModel.setColumnIdentifiers(...)'將它們重新設置。

希望這會有所幫助。

8

如果列數使用該代碼

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

您需要在代碼更新表後調用'jtable.getTableHeader()。repaint();'。 – Amin 2016-02-26 02:50:11