引言
在乙個免費的erp系統的開發過程中,存在這樣的需求,需要用jtable的方式定義乙個報表模板, 這個模板要能夠支援公式,在後台的業務出來中,會根據公式算出實際的值,然後在添回模板中,變成報表。如下圖,就是一張負責資產表的報表模板:
而最終生成的資料如下:
在圖一,我們可以看到17行是公式是:c3+c4(當然也可以用sum (c3:c4) ).也就是說,我們的公式需要支援引用其他的單元格。那麼在實際的做這個模板的過程中,對於要引用的單元格的行列號,都要能夠一目了然;否則,總不至於讓人乙個乙個的去數吧,效率低不說,還很容易出錯。至於列號,jtable 本來就有column header,自不必多說。現在的關鍵就是如何實現jtable 的row header。如何實現row header 呢?那就是用jscrollpane。
jscrollpane介紹:
相信用過jtable和jscrollpane的人都會知道。如果我們把jtable 加到乙個jscrollpane中,jtable就會自然後表頭(你這不是廢話嗎?),但是如果我們加大其他的容器中,你就會發現那個表頭不見了,比如你想要在乙個jpanel 中新增,就只能這樣了:
jtable table =newjtable();
jpanel tablepane =newjpanel(newborderlayout());
tablepane.add(table.gettableheader(),borderlayout.
north);
tablepane.add(table,borderlayout.
center);
由此,我們可以看出,通過
jscrollpane
可以自動為
jtable
加上列標題。那麼他是怎麼實現的呢?
先來看看jscrollpane的結構:
可知,jscrollpane具有column header 和row header的區域,可以通過setcolumnheaderview(component view) 和setrowheaderview(component view)分別為它們新增相應的外觀元件。jscrollpane 在新增jtable的時候,會自動setcolumnheaderview(table.gettableheader()).
想要新增jtable 的row header,只需要把乙個元件新增到row header 區域。那麼該用什麼樣的元件呢? 可以選擇jlist,也可以用只有一列的jtable.
新增row header
首先建立乙個只有一列的jtable:
jtable
rowheadertable
=newjtable ()
通過preparerenderer把**單元的樣式設定與column header一樣的樣式。
然後把這個
table
加到jscrollpane
的row header
區域:
scroll.setrowheader(rowheadertable);
JTable 實現行標題
引言 在乙個免費的erp系統的開發過程中,存在這樣的需求,需要用jtable的方式定義乙個報表模板,這個模板要能夠支援公式,在後台的業務出來中,會根據公式算出實際的值,然後在添回模板中,變成報表。如下圖,就是一張負責資產表的報表模板 而最終生成的資料如下 在圖一,我們可以看到17行是公式是 c3 c...
SQL實現行轉列
需求 用sql實現行轉列。如下圖所示 行顯示的資料轉換成列顯示 實現行轉列的sql指令碼如下 select date format last day date format now y m d y m d as 業務日期,max case index code when ind20101001 th...
Mysql實現行轉列
create table loc loc varchar 50 xiaoqu varchar 50 addr varchar 50 company varchar 50 插入資料 區域 小區名稱 房屋位址 中介公司寶山 慶安三村 綏化路52弄a寶山 月浦十村 月浦十村67號b寶山 盛橋三村 盛橋三村...