|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Java的桌面程序开发在java程序员里通常叫swing开发,主要用的swing包里的类开发的,也就是通常说的c/s架构开发数据|数据库使用Java开辟数据库使用体系时,常常必要在用户界面上显现查询了局。因为SUN公司供应的JDK1.x开辟工具包不是可视化的集成开辟情况(IDE),不克不及象Delphi、VB那样便利地把查询了局在DBGrid等表格中显现出来。因而,只能靠本人编写代码来完成。
在实践使用中,我们能够使用Vector、JTable、AbstractTableModel等三个类较好地办理这一成绩。以下,具体先容一下完成办法。
1、类Vector、类JTable及类AbstractTableModel简介:
1、类Vector:
类Vector是Java的汗青汇合类,从属于java.util包。它包装了异构链表和数组杂合体,具有以下两个特性:
*向量是异构的,不请求每一个元素的范例不异,向量中能够夹杂多种对象范例;
*向量是数组杂合体,由于它们能够在增添元素时静态增年夜。
其异构性恰好切合数据库纪录中属性范例纷歧的特性,而其静态性也恰好切合数据库查询时,了局集纪录个数不定的特性。
类Vector界说以下:
publicclassVectorextendsAbstractList
implementsList,Cloneable,Serializable{…}
完成了向量成员的查找、新增、删除等办法。如:add(Objectobj)可便利地到场一个对象;get(intindex)可便利地失掉向量中的一个对象;remove(Objectobj)则可便利地删除向量中一个对象。
2、类JTable:
JTable组件是Swing组件中对照庞大的小件,从属于javax.swing包,它能以二维表的情势显现数据。类JTable界说以下:
publicclassJTableextendsJComponent
implementsTableModelListener,Scrollable,TableColumnModelListener,
ListSelectionListener,CellEditorListener,Accessible{…}
类JTable在显现数据时具有以下特性:
*可定制性:能够定制数据的显现体例和编纂形态;
*异构性:能够显现分歧范例的数据对象,乃至包含色彩、图标等庞大对象;
*烦琐性:能够以缺省体例轻松地创建起一个二维表。
其可定制性可满意分歧用户和场所的请求,异构性也恰好切合数据库会见了局会合属性范例纷歧的特性。类JTable供应了极其丰厚的二维表格操纵办法,如设置编纂形态、显现体例、选择行列等,在此纷歧一赘述。
利用类JTable显现数据之前,必需依据情形天生定制模子、单位绘制器或单位编纂器。类AbstractListModel用来定制用户本人的数据模子,这个类在前面要先容。TableCellRenderer接口用来定制单位绘制器,TableCellEditor接口用来定制单位编纂器,这两个接口次要用于色彩对象的处置上,在示例中没有效到,不做过量申明。
3、类AbstractTableModel:
类AbstractTableModel是一个笼统类,没有完整完成,不克不及实例化,利用时必需在程序中完成办法。它从属于javax.swing.table。类界说以下:
publicabstractclassAbstractTableModelextendsObject
implementsTableModel,Serializable{…}
类AbstractTableModel供应了TableModel接口中尽年夜多半办法的缺省完成。TableModel接口界说了JTable的基本数据布局。用户要天生本人的数据模子,原本能够经由过程完成TableModel接口中一切办法来满意请求,但办理听众表的功效关于一切数据模子是配合的,以是在javax.swing.table中又界说了类AbstractTableModel来处置这个事情。它既办理听众表,又为天生TableModelEvents事务并托付给听众供应了便当。
要想天生一个详细的TableModel作为AbstractTableMode的子类,最少必需完成上面三个办法:
publicintgetRowCount();
publicintgetColumnCount();
publicObjectgetvalueAt(introw,intcolumn);
至此,我们能够创建一个复杂二维表(5×5),完成办法以下:
TableModeldataModel=newAbstractTableModel(){
publicintgetColumnCount(){return5;}
publicintgetRowCount(){return5;}
publicObjectgetvalueAt(introw,intcol){returnnewInteger(row*col);}
};
JTabletable=newJTable(dataModel);
JScrollPanescrollpane=newJScrollPane(table);
2、数据库及其毗连办法简介:
示例接纳Sybase数据库体系,数据库寄存在数据库服务器中。路径为:D:WORKER,数据库名为:worker.dbf。具有以下字段:
字段名
范例
Wno(职工号)
VARCHAR
Wname(职工名)
VARCHAR
Sex(性别)
VARCHAR
Birthday(出身日期)
DATE
Wage(人为)
FLOAT
要毗连此数据库,需利用java.sql包中的类DriverManager。此类是用于办理JDBC驱动程序的有用程序类。它供应了经由过程驱动程序获得毗连、注册,取消驱动程序,设置挂号和数据库会见登录超时等办法。详细毗连办法以下:
第一步:定位、装进和链接SybDriver类;
driver="com.sybase.jdbc.SybDriver";
SybDriversybdriver=(SybDriver)Class.forName(driver).newInstance();
第二步:注册SybDriver类;
DriverManager.registerDriver(sybdriver);
第三步:获得毗连(SybConnection)对象援用。
user="sa";
password="";
url="jdbc:sybase:Tds:202.117.203.114:5000/WORKER";
SybConnectionconnection=(SybConnection)DriverManager.getConnection
(url,user,password);
创建完毗连后,便可经由过程Statement接口举行数据库的查询与变动。
3、完成办法:
限于篇幅,在此只给出中心代码,包引进、界面处置、变量界说等部分不再先容。
第一步:对象声明。
AbstractTableModeltm;//声明一个类AbstractTableModel对象
JTablejg_table;//声明一个类JTable对象
Vectorvect;//声明一个向量对象
JScrollPanejsp;//声明一个转动杠对象
Stringtitle[]={"职工号","职工名","性别","出身日期","人为"};
//二维表列名
第二步:定制表格。
1、完成笼统类AbstractTableModel对象tm中的办法:
vect=newVector();//实例化向量
tm=newAbstractTableModel(){
publicintgetColumnCount(){
returntitle.length;}//获得表格列数
publicintgetRowCount(){
returnvect.size();}//获得表格行数
publicObjectgetvalueAt(introw,intcolumn){
if(!vect.isEmpty())
return
((Vector)vect.elementAt(row)).elementAt(column);
else
returnnull;}//获得单位格中的属性值
publicStringgetColumnName(intcolumn){
returntitle[column];}//设置表格列名
publicvoidsetvalueAt(Objectvalue,introw,intcolumn){}
//数据模子不成编纂,该办法设置为空
publicClassgetColumnClass(intc){
returngetvalueAt(0,c).getClass();
}//获得列所属对象类
publicbooleanisCellEditable(introw,intcolumn){
returnfalse;}//设置单位格不成编纂,为缺省完成
};
2、定制表格:
jg_table=newJTable(tm);//天生本人的数据模子
jg_table.setToolTipText("显现全体查询了局");//设置匡助提醒
jg_table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
//设置表风格整尺寸形式
jg_table.setCellSelectionEnabled(false);//设置单位格选择体例
jg_table.setShowVerticalLines(true);//设置是不是显现单位格间的支解线
jg_table.setShowHorizontalLines(true);
jsp=newJScrollPane(jg_table);//给表格加上转动杠
第三步:显现查询了局。
1、毗连数据库:第二部分已给出。
2、数据库查询:
Statementstmt=connection.createStatement();
ResultSetrs=stmt.executeQuery("select*fromworker");
3、显现查询了局:
vect.removeAllElements();//初始化向量对象
tm.fireTableStructureChanged();//更新表格内容
while(rs.next()){
Vectorrec_vector=newVector();
//从了局会合取数据放进向量rec_vector中
rec_vector.addElement(rs.getString(1));
rec_vector.addElement(rs.getString(2));
rec_vector.addElement(rs.getString(3));
rec_vector.addElement(rs.getDate(4));
rec_vector.addElement(newFloat(rs.getFloat(5)));
vect.addElement(rec_vector);//向量rec_vector到场向量vect中
}
tm.fireTableStructureChanged();//更新表格,显现向量vect的内容
例图以下:
若要完成示图中纪录前翻、后翻的效果,有两种办法:
1、假如软件情况撑持JDBC2.0,可间接使用rs.prevoius()和rs.next()取得纪录,然后经由过程类JTextField中的setText()办法,显现出各个字段值。
2、假如不撑持JDBC2.0,则可使用向量Vector按行掏出JTable中数据。自界说一个指针,用来纪录地位。当指针加1时,掏出上一行数据放进Vector中显现;指针减1时,掏出下一行数据显现。显现办法同上。
必要申明的是:代码中没有给出捕获破例的部分,如SQLException,实践使用中必需给出。别的,有些体系中,文本域中的汉字纷歧定能准确显现,需借助别的办法完成。
但是对于JAVA技术类的学习,我觉得大课堂反而会影响自身独立思考的过程,因为上课的时候,老师讲课的速度很快为了不遗漏要点,通常会仔细的听, |
|