列表在任何一門開發語言中都佔有非常重要的地位,在.Net中有GridView,在extjs中有GridPanel。。。,而在java Swing中,它的名字叫JTable。這兩天在研究JTable的使用,也有一些收穫,所以在這裡跟大家分享交流一下,下面的內容將包括:1)JTable的基本用法;2)怎樣為JTable添加行點擊響應事件,雙擊後開啟視窗;3)怎樣為JTable的行添加標識,如行id等;4)怎樣在JTable中動態添加新行;
1)JTable的基本用法:
我用的IDE是NetBeans,由於也是簡單做幾個頁面的用戶端,主要還是Web開發的,所以暫時不打算深究java winform開發,所以介面怎麼快就怎麼做了,我直接在表單的“設計”模式下直接拖“表格”出來就了事,在預設的情況下,這個表格還會有幾行幾列的填充內容的,如果需要編輯,可以先點擊表格進入它的編輯狀態,然後右擊,選擇“表內容”就可以進行表格的行和列的編輯了,不過通常情況下,表格的內容都是動態產生的,所以在控制項上直接編輯它的內容的意義是不大的,當然,做DEMO時比較有用。
怎樣為JTable初始化內容呢?我的習慣是在frame的構造方法來完成,其實通過查API可以得知,JTable支援多種構造方法,而我認為動態產生資料來說,用Vector對象的形式來產生列頭配置及資料配置是比較簡單直觀的方法,下面來看個例子:
String[] columnModel = {"時間","編號","金額","操作員"}; Vector cmVector = new Vector(); for(int i = 0,cmCount = columnModel.length;i < cmCount;i++){ cmVector.addElement(columnModel[i]); } //繪製資料模型 Vector dataVector = new Vector(); TempOrdersList tempOrderList = TempOrdersManager.getInstance().getList(); int billCount = tempOrderList.size(); if(billCount > 0){ for(int j = 0;j < billCount;j++){ TempOrders orderItem = (TempOrders)tempOrderList.get(j); String id = orderItem.getId(); String time = orderItem.getTime(); String no = orderItem.getNo(); float total = orderItem.getTotal(); String user = orderItem.getUser(); CustomTableCell idCell = new CustomTableCell(id,no,orderItem); Vector rowVector = new Vector(); rowVector.addElement(time); rowVector.addElement(idCell); rowVector.addElement(total); rowVector.addElement(user); dataVector.addElement(rowVector); rowVector = null; idCell = null; orderItem = null; } } DefaultTableModel tableModel = new DefaultTableModel(dataVector,cmVector){ @Override public boolean isCellEditable(int row,int column){ //只允許使用者對第四列的資料進行編輯(第四列是數量) if(column == 4){ return true; }else{ return false; } } }; BillTable.setModel(tableModel); cmVector = null; dataVector = null;
使用Vector對象作為構造方法的對象時,要傳入兩個Vector的執行個體,第一個是儲存資料的Vector,第二個參數是儲存列頭資訊的Vector,在
樣本中的dataVector是通過遍曆一個list對象而動態填充內容的,在執行個體化並初始化好Vector後,只要調用JTable的setModel方法,就可以將列頭及資料的資訊顯示在表格中啦。
2)怎樣添加行點擊事件
首先,在JTable的設計檢視中先選中JTable,然後右擊,在事件的快顯功能表中依次選中"mouse-click”就可以捕捉表格的點擊事件了,在這個事件監聽方法中,會傳入一個java.awt.event.MouseEvent類的執行個體evt,用evt.getClickCount(),就可以知道觸發該事件時使用者的點擊次數,只要這個方法返回的值大於等於2,就說明使用者雙擊了,下面的範例程式碼,供大家參考:
if(evt.getClickCount() >= 2){ int rowIndex = productTable.rowAtPoint(evt.getPoint()); int columnIndex = Common.getIndetityColumn(productTable); //如果沒有找到帶有標記的列,就不向下執行了 if(columnIndex == -1){ return; } CustomTableCell identifyCell = (CustomTableCell)productTable.getValueAt(rowIndex, columnIndex); String productId = identifyCell.getId(); ProductDetail productDetail = new ProductDetail(productId); Common.centerWindow(productDetail); //productDetail.setVisible(true); }