国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Java中基于自定義表格模型的表格實(shí)現(xiàn)方法研究

2012-04-29 18:08:09潘國榮
電腦知識與技術(shù) 2012年15期
關(guān)鍵詞:表格

潘國榮

摘要:JTable是Java Swing開發(fā)工具包中的表格組件。該文介紹了通過定義一個(gè)自定義表格模型來構(gòu)造和使用表格的方法。

關(guān)鍵詞:Java;表格;表格模型

中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2012)15-3583-03

Research on Implementation Method of Table Based on Custom Table Model in Java

PAN Guo-rong

(Chang Zhou Liu Guo-jun Higher Vocational and Technical School, Changzhou 213025, China)

Abstract:Jtable is the table componets of Java Swing development kit. This paper discusses the method of constructing and using tables by defining a custom model.

Key words: Java; table; table model

因Java程序設(shè)計(jì)語言具有強(qiáng)大的功能,正越來越多地被軟件開發(fā)人員所使用。使用Java既可以編寫基于Windows的圖形用戶界面GUI程序,也可以編寫在Internet網(wǎng)絡(luò)環(huán)境下運(yùn)行的Web應(yīng)用程序?,F(xiàn)在編寫GUI程序主要使用Swing開發(fā)工具包,它以抽象窗口工具包(AWT)為基礎(chǔ)使跨平臺應(yīng)用程序可以使用任何可插拔的外觀風(fēng)格。如果要在程序界面中顯示大量數(shù)據(jù),并且經(jīng)常和數(shù)據(jù)庫中數(shù)據(jù)進(jìn)行交互,可以使用Swing開發(fā)工具包中的表格JTable組件,該組件是較為復(fù)雜的組件之一。

JTable組件控制數(shù)據(jù)的顯示方式,但JTable組件中存儲的數(shù)據(jù)是由表格模型決定的,因此在我們創(chuàng)建JTable組件前,應(yīng)先創(chuàng)建一個(gè)表格模型。Swing開發(fā)工具包中提供了好幾種表格模型類,如DefaultTableModel、AbstractTableModel,但直接使用它們來構(gòu)造表格還顯得不太方便和靈活,通??梢宰约憾x一個(gè)模型類來構(gòu)造表格。

1自定義表格模型的定義

可以將Swing中提供的抽象表格模型類AbstractTableModel作為基類,派生出一個(gè)表格模型類,在該類中,重新定義了構(gòu)造方法以及向表格中添加數(shù)據(jù)行的方法、刪除表格中數(shù)據(jù)行的方法、設(shè)置和讀取表格單元格中數(shù)據(jù)的方法及獲取表格中行數(shù)的方法等,通過設(shè)計(jì)這些方法,大大方便了對表格中數(shù)據(jù)的操縱。

自定義表格模型類MyTableModel.java的定義如下:

import java.util.*;

import java.sql.*;

import javax.swing.table.*;

import javax.swing.*;

public class MyTableModel extends AbstractTableModel

{ private Vector content=null; //存放表格數(shù)據(jù)的Vector

private String[] title_name; //存放表格標(biāo)題的數(shù)組

private int colCnt; //表格中的列數(shù)

private int colSt,colEnd; //可以編輯列的起止索引號

//構(gòu)造方法

public MyTableModel(String[] title_name,int n)

{this.title_name=new String[n];

colCnt=n;

for(int i=0;i

{ this.title_name[i]=new String();

this.title_name[i]=title_name[i];

}

content=new Vector();

}

//添加一行,數(shù)據(jù)行存放在Vector類型的row

public void addRow(Vector row)

{content.add(row);

}

//添加多行,數(shù)據(jù)行存放在rows中,rows中每一個(gè)對象是一個(gè)Vector類型的row

public void addRows(Vector rows)

{for(int i=0;i

{ content.add(rows.get(i));

}

}

//刪除一行

public void removeRow(int row)

{content.remove(row);

}

//刪除所有行,全部刪除

public void removeRows(int row,int count)

{for(int i=0;i

{ if(content.size()>row)

{ content.remove(row);

}

}

}

//獲取行數(shù)

public int getRowCount(){return content.size();}

//獲取某一單元格的值

public Object getValueAt(int row,int col)

{return ((Vector)content.get(row)).get(col);}

//更新表格中某一單元格的值

public void setValueAt(Object value,int row,int col)

{((Vector)content.get(row)).remove(col);

((Vector)content.get(row)).add(col,value); this.fireTableCellUpdated(row,col);

}

//設(shè)定可編輯列的起止范圍,從colSt到colEnd

public void setColumnEditable(int colSt,int colEnd)

{this.colSt=colSt;

this.colEnd=colEnd;

}

//決定表格中哪些單元格的值可以修改,返回false表示不能修改

public boolean isCellEditable(int rowIndex,int columnIndex)

{

//序列號不能修改

if(columnIndex>=colSt && columnIndex<=colEnd)

{ return true;

}

return false;

}

//獲取列名

public String getColumnName(int col)

{ return title_name[col];

}

//獲取列數(shù)

public int getColumnCount()

{ return title_name.length;

}

}

2自定義表格模型的使用

表格模型定義好后,要使用表格就比較方便了。下面通過從數(shù)據(jù)庫學(xué)生情況表(學(xué)號:ssno,姓名:ssname,性別:ssex,備注:ss? note)中將數(shù)據(jù)取至表格中來說明其主要步驟。

2.1定義表格標(biāo)題String數(shù)組、JTable組件對象、及自定義表格模型MyTableModel的對象

String[] heads={"序號","學(xué)號","姓名","性別","備注"}; JTable table ;

MyTableModel model;

2.2生成JTable組件對象、自定義表格模型MyTableModel的對象

model=new MyTableModel(heads,5); table=new JTable(model);

p.add(new JScrollPane(table));

2.3從數(shù)據(jù)庫中查詢數(shù)據(jù),將數(shù)據(jù)填充至表格中

Vector row;

Vector rows=new Vector();

int i=1;

try

{ Statement stat=ScoreMis.con.createStatement(); // ScoreMis為主類

ResultSet result=stat.executeQuery("select * from sstudent where left(ssno,4)="+cursc+" order by ssno");// cursc為代表當(dāng)前班級的成員變量

while(result.next())

{row=new Vector();

row.add(String.valueOf(i++));

row.add(result.getString("ssno"));

row.add(result.getString("ssname"));

row.add(result.getString("ssex"));

row.add(result.getString("ssnote"));

rows.add(row);

}

model.addRows(rows);

model.fireTableDataChanged();}

catch(SQLException e2)

{ JOptionPane.showMessageDialog(this, "操作數(shù)據(jù)庫出錯(cuò):"+e2);

}

catch(Exception e3)

{ JOptionPane.showMessageDialog(this, "出現(xiàn)其他錯(cuò)誤:"+e3);

}

3結(jié)束語

通過上述例程代碼可以看出,在使用了自定義表格模型后,表格的構(gòu)造和表格中數(shù)據(jù)的填充就顯得非常方便了,并且可以通過調(diào)用表格模型中的相關(guān)方法來對表格中的數(shù)據(jù)進(jìn)行處理,這大大降低了初學(xué)者學(xué)習(xí)使用表格組件的難度,也可以程序提高開發(fā)人員的工作效率。

參考文獻(xiàn):

[1]肖孟強(qiáng),張忠義.Java程序設(shè)計(jì)基礎(chǔ)[M].北京:人民郵電出版社,2003.

[2]李鐘尉,陳丹丹.Java項(xiàng)目開發(fā)案例全程實(shí)錄[M].北京:清華大學(xué)出版社,2011.

猜你喜歡
表格
《現(xiàn)代臨床醫(yī)學(xué)》來稿表格要求
《現(xiàn)代臨床醫(yī)學(xué)》來稿表格要求
統(tǒng)計(jì)表格的要求
統(tǒng)計(jì)表格的要求
統(tǒng)計(jì)表格的要求
本刊表格的要求
儋州市| 平乐县| 英超| 通道| 彩票| 新郑市| 卓资县| 景东| 安泽县| 宝鸡市| 营口市| 南乐县| 英德市| 湾仔区| 鹿泉市| 西峡县| 清新县| 冷水江市| 普兰县| 屏东市| 纳雍县| 四川省| 石门县| 奉贤区| 盘山县| 玛多县| 栾川县| 缙云县| 大港区| 东安县| 陇南市| 松阳县| 旬阳县| 元氏县| 兴化市| 新野县| 五峰| 宜兰市| 安塞县| 蓬溪县| 邵东县|