2010-04-06 82 views
1

我在JTable中工作,我有這樣的要求。 說有4欄即10,20,30,40合併JTable中的列

現在的價值通常像10-20 20-30和30-40 因此,我們很容易顯示該範圍的名稱。

但最近的值開始有所隨機像15-25 10-25,25-30

在這種情況下,我們的JTable應該動態地調整行的大小,使得它代表了範圍只意味着它不應該干擾現有的單元格和只有偏離正常範圍的行。

更準確地說,我應該能夠根據單元格內容合併和拆分單元格。

編輯:它像this.A人被分配任務的時間

10|   |20|   |30| 

    |----------| 
       |----------| 

代表10-20和20-30的特定點。第一線10,20,30是列名。第二線是代表10-20和箱的圖形表示20-30.Now如果一個值15-25來

10|   |20|   |30| 

    |----------| |----------| 
     |-----------| 
      |-----------| 
    |-------------| 

    |----------| |----------| 

實際上存在第一和第四行中之間沒有間隙只是爲了顯示他們是單獨的cells.Now現在,因爲數據進入像15-25中間範圍,我們必須重新對齊細胞形狀如上我發佈了這一點。

+1

public void setDataVector(Vector newData, Vector columnNames) { if (newData == null) throw new IllegalArgumentException("setDataVector() - Null parameter"); dataVector = newData; columnIdentifiers = new Vector(columnNames); 

工作正常,請註明您現在得到什麼,你想獲得代替。你能給出一個純文本的數據例子嗎? – tucuxi 2010-04-06 14:19:46

回答

2

我在Swing中實現的唯一地方是the third example in this link。這裏覆蓋的關鍵方面是覆蓋JTable中的getCellRect方法,並覆蓋表UI以進行繪製。

+1

當我在1中運行時,會引發Stackoverflow錯誤。4 :( – Harish 2010-04-06 11:12:46

+0

有趣的 - 我設法讓它在jdk6上工作,並可能在未來的項目中使用它 – tucuxi 2010-04-06 14:37:54

3

您可以在模型或視圖級別合併JTable列。 Swing中沒有特別好的支持(也就是說,沒有「jTable.mergeColumns(colA,colB)」內置功能)。

說你有一個表是這樣的:

A B C 
1 2 3 
2 4 6  

如果您在模型層合併列B和C,你的模型會說,只有2列(A和B + C),並將第二個'B和C'列的值定義爲2 + 3 = 5和4 + 6 = 10;或者可以說這個列字符串的值,例如「2 3」和「4 6」。

如果您在視圖級別合併這些列,則必須爲列B和C提供您自己的ColumnCellRenderer,並以某種方式避免繪製網格線。我不推薦這種方法。

的最後一個選項是在同一時間改變模型和視圖:您可以修復代碼指向由AKF由代AttributiveCellTableModelsetDataVector()方法開始(一個壓縮版本可以從http://www.codeguru.com/java/articles/139.shtml下載)以下內容:我在JDK6