熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Swinghacks——JTable根據內容調整列寬

2013-11-23 20:35:48  來源: Java開源技術 

  JTable默認情況下列寬是固定值如下

  若要根據內容來調整列寬那首先要知道內容占用多少寬度代碼如下

  [java]

  int maxwidth = ;

  for (int row=; row<tablegetRowCount(); row++) {

  TableCellRenderer rend = tablegetCellRenderer (row col);

  Object value = tablegetValueAt (row col);

  Component comp =

  rendgetTableCellRendererComponent (table

  value

  false

  false

  row

  col);

  maxwidth = Mathmax (compgetPreferredSize()width

  maxwidth);

  }

  這段代碼是在計算列內容中的最大值maxwidth其原理是這樣的

  通過數據模型TableModel獲取該列某行的值數據

  [java]

  Object value = tablegetValueAt (row col);

  用渲染方法把值數據轉換成顯示的組件就是這個方法getTableCellRendererComponent

  如果不了解MVC模型和JTable的渲染器的話建議看這篇文章

  getTableCellRendererComponent方法應該是jtable調用來把數據模型的數據渲染成component然後顯示在jtable的單元格上所以我們看到的jtable單元格都是這個方法返回的component

  現在主動調用getTableCellRendererComponent方法獲取到要顯示的component然後getPerferredSize再篩選出最大值就行

  最後把篩選出的最大值設置為column的寬度即可

  上圖已經是根據內容調整列寬了但是還有一個缺點就是第一列只考慮到了列內容的寬度但是沒有考慮到表頭的內容寬度

  不過思路也是一樣的獲取表頭的數據模型 和 渲染器然後主動構造出表頭的component獲取PerferredSize再判斷下列寬值即可

  [java]

  TableCellRenderer headerRenderer = columngetHeaderRenderer();

  if (headerRenderer == null)

  headerRenderer = tablegetTableHeader()getDefaultRenderer();

  Object headerValue = columngetHeaderValue();

  Component headerComp =

  headerRenderergetTableCellRendererComponent (table

  headerValue

  false

  false

  

  col);

  maxwidth = Mathmax (maxwidth

  headerCompgetPreferredSize()width);


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28729.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.