由jtable淺談vector >的用法(轉自a718515028的專欄)


以前只用過vector<Object>  ,但是在做從數據庫導出數據放到jtable中時,發現還有個vector<vector<Object>>的用法。

先說jtable和DefaultTableModel

jtable本身是可以顯示一張列表,但是不能按鈕監聽的增加正行數據。

jtable中沒有addRow(Object[] rowData) 或者addRow(Vector rowData) ,方法。

但是jtable中有一個構造方法,JTable(TableModel dm)

而TableModel是一個接口,實現這個接口有一個常用的類DefaultTableModel。在DefaultTableModel中有一個方法,addRow(Object[] rowData)可以將一個一維數組的數據添加到這個table中model的結尾,同時還有一個addRow(Vector rowData)方法,可以將一個Vector集合添加到table中model的結尾。

 

tip:

說明為什么會有addRow(Object[] rowData)和addRow(VectorrowData)呢?

我們知道數組有個特性就是長度固定,addRow(Object[] rowData)只 能添加長度固定的一個數組數據。也就是說如果要查詢的數據的長度的未知,如果用數組就需要事先初始化數組的長度,當由於長度未知,就不得不設置的很大以至於能存儲要查詢的數據。如果數據不夠這個這個數組的長度,那么剩余的長度也會添加到中table或者table的model中,這些部分將以空白數據顯示 在table中

而vector有個特性就是長度可變,有多少數據就用多少的vector長度,不夠的自動增長為原來長度的一倍。  在向table中或model中添加數據時,就算要查詢的數據的長度未知,vector也會自動增加長度容納這些數據,不會造成空間浪費。既然 vector中沒有空白的空間,那么table中也就自然不存在空白的數據。

 

怎樣把數據以jtable顯示。

jtable中的數據是以二維數組的形式添加到table中的,

publicJTable(Object[][] rowData,Object[] columnNames)

前面一個參數代表數據,后面一個代表列。

如:

1 String [] title = {"學號","姓名","成績"};  
2 Object[][]o = {{"1","張三","80"},{"2","里斯","550"},{"3","王二","70"}};  
3 Jtable jt  = newJTable(o,title); 

 

這只是顯示固定的數據。如果要顯示從數據庫中查詢出來的數據, 就必然用到vector<vector<Object>>。為什么不直接用Vector<Object>,如直接把 Vector<Student>,直接加到jtable中,Student對象可以自動得到student的姓名、成績等值,加入到 jtable中??這種說看似很合理,但是,我們要知道jtable只能顯示一個數據,不會智能的顯示這個對象的各個屬性值,所以我們要把這個 Student對象的屬性值也要顯式的輸出來放到一個集合中,再放到table中。table的每行組成一個vector,每一行的數據有組成一個 vector,就需要在vector中再放一個vector,因為vector的底層也是基於數組的,所以就好像是一個二維數組,第一個vector代表 行,第二個vector代表這個行的各列數據。

在API中DefaultTableModel的一個構造方法是這樣定義的

DefaultTableModel
public DefaultTableModel(Vector data,
Vector columnNames)構造一個 DefaultTableModel,並通過將 data 和 columnNames 傳遞到 setDataVector 方法來初始化該表。 

參數:
data - 表的數據,它是一個 Vector,由包含多個 Object 值的 Vector 組成(注意)
columnNames - 包含新的列名稱的 vector

比如我們有一個已經查詢好的集合Vector<Book> bookList;

在jtable中顯示這個集合

 

Vector<String> title = newVector<String>();// 列名           
  
               title.add("ISBN");  
  
               title.add("書名");  
  
               title.add("書類型");  
  
               title.add("單價");  
  
Vector<Vector<Object>> data = newVector<Vector<Object>>();//  
  
for (int i = 0; i < bookList.size(); i++) {  
  
                       Vector<Object>v = new Vector<Object>();//里面一層的vector存放書的各個數據  
  
                       Bookb = bookList.get(i);                      
  
                       v.add(b.getIsbn());  
  
                       v.add(b.getBookName());  
  
                       v.add(b.getBookType());  
  
                       v.add(b.getPrice());                                   
  
                       data.add(v);//外面一層的vector  data存放已經有數據的第一個vector v  
  
               }  
  
DefaultTableModel model = new  DefaultTableModel(data, title);  
  
table = new JTable(model){  
  
                       publicboolean isCellEditable(int row,int col){  
  
                                  return false;}};//利用一個匿名內部類重寫這個jtable中isCellEditable方法,設置為不可編輯。  

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM