在實際應用中,我們可以使用Vector、JTable和AbstractTableModel來解決這個問題。下面,詳細介紹壹下實現方法。
壹、類Vector、類JTable、類AbstractTableModel介紹:
1,類別向量:
Class Vector是Java的歷史集合類,屬於java.util包。它包裝了異構鏈表和數組混合,具有以下兩個特點:
*矢量是異構的,不要求每個元素都有相同的類型,可以在矢量中混合各種對象類型;
* Vector是數組的混合體,因為它們可以在添加元素時動態增加。
其異構性與數據庫記錄中不同屬性類型的特征相吻合,其動態性與數據庫查詢中結果集記錄數量不確定的特征相吻合。
類別向量定義如下:
公共類向量擴展抽象列表
實現列表,可克隆,可序列化
實現了向量成員的查找、添加和刪除方法。比如add(Object obj)可以輕松添加壹個對象;Get(int index)可以輕松獲取vector中的壹個對象;移除(對象對象).可以方便地刪除向量中對象。
2.JTable類:
JTable組件是Swing組件中比較復雜的小部件,屬於javax.swing包,可以以二維表格的形式顯示數據。JTable類定義如下:
公共類JTable擴展了JComponent
實現TableModelListener、Scrollable、TableColumnModelListener、
ListSelectionListener,CellEditorListener,可訪問{…}
JTable類在顯示數據時具有以下特征:
可定制性:可以定制數據的顯示方式和編輯狀態;
*異構性:可以顯示不同類型的數據對象,甚至包括顏色、圖標等復雜對象;
*簡單性:默認情況下,您可以輕松設置壹個二維表。
其定制性可以滿足不同用戶和場合的需求,其異構性也與數據庫訪問結果集中不同屬性類型的特點不謀而合。JTable類提供了極其豐富的二維表格操作方法,比如設置編譯。
系列的狀態、顯示模式、等級的選擇等。,這裏就不詳述了。
在使用JTable類顯示數據之前,必須根據情況生成自定義模型、單元畫圖器或單元編輯器。類AbstractListModel用於定制用戶自己的數據模型,後面會介紹。
TableCellRenderer接口用於自定義單元渲染器,TableCellEditor接口用於自定義單元編輯器。這兩個接口主要用於處理顏色對象,示例中沒有用到,不做過多解釋。
3.類AbstractTableModel:
Class AbstractTableModel是壹個抽象類,沒有完全實現,不能實例化。當使用它時,方法必須在程序中實現。它屬於javax.swing.table類定義如下:
公共抽象類AbstractTableModel擴展對象
實現TableModel,Serializable{…}
AbstractTableModel類提供了TableModel接口中大多數方法的默認實現。TableModel接口定義了JTable的基本數據結構。用戶想要生成他們自己的數據模型,這本來是可以的
TableModel接口中的所有方法都是為了滿足需求而實現的,但是管理受眾表的功能是所有數據模型共有的,所以在javax.swing.table中定義了AbstractTableModel類
處理好這份工作。它不僅管理觀眾表,還幫助生成TableModelEvents事件並將它們委托給觀眾。
要生成具體的TableMode作為AbstractTableMode的子類,至少必須實現以下三個方法:
public int getRowCount();
public int getColumnCount();
公共對象getValueAt(int row,int column);
此時,我們可以構建壹個簡單的二維表格(5×5),實現方法如下:
table model data model = new AbstractTableModel(){
public int getColumnCount(){ return 5;}
public int getRowCount(){ return 5;}
public Object getValueAt(int row,int col){ return new Integer(row * col);}
};
JTable table = new JTable(data model);
JScrollPane scroll pane = new JScrollPane(table);
二、數據庫及其連接方法:
本例采用Sybase數據庫系統,數據庫存儲在數據庫服務器中。路徑為:D:/WORKER,數據庫名稱為:worker.dbf具有以下字段:
字段名
類型
員工編號
可變長字符串
Wname(員工姓名)
可變長字符串
性(性別)
可變長字符串
出生(出生日期)
日期
工資
漂浮物
要連接到這個數據庫,您需要使用java.sql包中的類DriverManager。這個類是用於管理JDBC驅動程序的實用程序類。它提供了通過驅動程序獲得連接、註冊、取消驅動程序、設置註冊和數據庫訪問超時等方法。具體連接方法如下:
步驟1:定位、加載並鏈接SybDriver類;
driver = " com . Sybase . JDBC . syb driver ";
syb driver syb driver =(syb driver)class . for name(driver)。new instance();
第二步:註冊SybDriver類;
driver manager . register driver(syb driver);
步驟3:獲取SybConnection對象引用。
user = " sa
密碼= " ";
URL = " JDBC:Sybase:Tds:202.117 . 203 . 114:5000/WORKER ";
syb connection connection =(syb connection)driver manager . get connection
(網址、用戶、密碼);
連接建立後,可以通過語句接口查詢和更改數據庫。
三、實施方法:
限於篇幅,這裏只給出核心代碼,包介紹、接口處理、變量定義等部分不做介紹。
第壹步:對象聲明。
AbstractTableModel tm//聲明壹個AbstractTableModel對象。
JTable jg _ table//聲明壹個類似JTable的對象
向量vect//聲明vector對象
JScrollPane jsp//聲明壹個滾動條對象
String title[]={“員工編號”、“員工姓名”、“性別”、“出生日期”、“工資”};
//二維表格列名
第2步:自定義表單。
1.在AbstractTableModel對象tm中實現方法:
vect =新向量();//實例化向量
tm=new AbstractTableModel(){
public int getColumnCount(){
返回title.length}//獲取表格中的行數
public int getRowCount(){
返回vect . size();}//獲取表格中的行數
公共對象getValueAt(int row,int column){
如果(!vect.isEmpty())
返回
((Vector)vect.elementAt(row))。elementAt(列);
其他
返回null}//獲取單元格中的屬性值
公共字符串getColumnName(int column){
返回標題[列];}//設置表格列名
public void setvalue at(Object value,int row,int column){}
//數據模型無法編輯,此方法設置為null。
公共類getColumnClass(int c){
返回getValueAt(0,c)。getClass();
}//獲取該列所屬的對象類。
public boolean is celled table(int row,int column){
返回false}//將單元格設置為不可編輯是默認實現。
};
2、自定義表單:
jg _ table = new JTable(TM);//生成您自己的數據模型
Jg_table.setToolTipText("顯示所有查詢結果");//設置幫助提示
jg _ table . setautoresizemode(JTable。AUTO _ RESIZE _ OFF);
//設置表格大小調整模式
jg _ table . setcellselectionenabled(false);//設置單元格選擇方法
jg _ table . setshowverticallines(true);//設置是否顯示單元格之間的分隔線。
jg _ table . setshowhorizontallines(true);
JSP = new JScrollPane(jg _ table);//在表格中添加滾動條
第三步:顯示查詢結果。
1.連接數據庫:給出第二部分。
2.數據庫查詢:
語句stmt = connection . create statement();
ResultSet RS = stmt . execute query(" select * from worker ");
3.顯示查詢結果:
vect . remove allements();//初始化vector對象
TM . firetablestructurechanged();//更新表格內容
while(rs.next()){
向量rec _ Vector = new Vector();
//從結果集中取出數據,放入向量rec_vector。
rec _ vector . add element(RS . getstring(1));
rec _ vector . add element(RS . getstring(2));
rec _ vector . add element(RS . getstring(3));
rec _ vector . add element(RS . getdate(4));
rec _ vector . add element(new Float(RS . get Float(5)));
vect . add element(rec _ vector);//矢量rec_vector加到vector上。
}
TM . firetablestructurechanged();//更新表格以顯示vector vector的內容。