




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JTable不能够正确显示标题JTable不能够正确显示标题/JTable不能够正确显示标题JTable不能够正确显示标题,关于这个,官方文档里面有说:JTable组件显示数据时,若是直接将其放置在Frame的contentPane中则表头一行会显示不出来,若是将其放置在JScrollPane中显示数据的话,表头会自动显示出来。引用Sun的原话为:It'seasytoputatableinascrollpane.Youneedjustoneortwolinesofcode:JScrollPanescrollPane=newJScrollPane(table);table.setPreferredScrollableViewportSize(newDimension(500,70));Thescrollpaneautomaticallygetsthetable'sheader,whichdisplaysthecolumnnames,andputsitontopofthetable.Evenwhentheuserscrollsdown,thecolumnnamesremainvisibleatthetopoftheviewingarea.Thescrollpanealsotriestomakeitsviewingareathesameasthetable'spreferredviewingsize.Thepreviouscodesnippetsetsthetable'spreferredviewingsizewiththesetPreferredScrollableViewportSize
method.Ifyou'reusingatablewithoutascrollpane,thenyoumustgetthetableheadercomponentandplaceityourself.Forexample:container.setLayout(newBorderLayout( ));container.add(table.getTableHeader( ),BorderLayout.PAGE_START);container.add(table,BorderLayout.CENTER);在使用时要注意!所以说使用JTable显示数据时,要将Table增加在JScrollPane里面;但是我的代码里面还是显示不出来,开始检查原因:原来:以下增加table不能够:scrollPanel.add(table);应该改为:scrollPanel.setViewportView(table);//解决显示表头问题:必定用这个但是,这样忧如还是不能够,在检查,在试一试,终于:将scrollPane的setLayout(null);说明掉,再试,Ok;&&&&&&&&&&&&&&&&&&&&&&&&&&&&这里,针对我的问题总结三点::1、用JScrollPane承接Table,不用JPanel等;2、用JScrollPane的构造函数成立,也许用scrollPanel.setViewportView(table);不用scrollPanel.add(table);3Table的父容器的布局管理器不能够设置为nullJScrollPane的布局,有特地的scroll的布局,也能够用,简略的话,不设置布局;不要Null;至此,Table和表头都能够正常显示了。packagestuinfosystem;importjava.awt.BorderLayout;importjava.awt.Frame;importjavax.swing.JDialog;importjavax.swing.JPanel;importjavax.swing.JTable;importjava.awt.Rectangle;importjavax.swing.table.DefaultTableModel;importjavax.swing.table.JTableHeader;importjava.sql.ResultSet;importjava.sql.*;importjavax.swing.JScrollPane;importjava.awt.FlowLayout;/***<p>Title:</p>**<p>Description:</p>**<p>Copyright:Copyright(c)2008</p>**<p>Company:</p>**@authornotattributable*@version1.0*/publicclassCourseManageDialogextendsJDialog{JPanelpanel1=newJPanel( );//需要注意的地方DefaultTableModeltable=newDefaultTableModel( );JTablejTable1=newJTable(table);JTableHeaderjTableHeader1=jTable1.getTableHeader( );JScrollPanejScrollPane1=newJScrollPane( );publicCourseManageDialog(Frameowner,Stringtitle,booleanmodal){super(owner,title,modal);try{setDefaultCloseOperation(DISPOSE_ON_CLOSE);jbInit( );pack( );}catch(Exceptionexception){exception.printStackTrace( );}}publicCourseManageDialog( ){this(newFrame( ),"CourseManageDialog",false);}privatevoidjbInit( )throwsException{panel1.setLayout(null);jScrollPane1.setBounds(newRectangle(2,0,329,88));this.getContentPane( ).add(jTableHeader1,java.awt.BorderLayout.NORTH);this.getContentPane( ).add(panel1,java.awt.BorderLayout.CENTER);panel1.add(jScrollPane1);jScrollPane1.getViewport( ).add(jTable1);//要注意的地方table.addColumn("编号");table.addColumn("学科名称");table.addColumn("学分");table.addColumn("课程性质");Stringa="";Stringb="";intc;intd;Strings1="selectcourseid,coursename,coursescore,courseconditionfromcourse";try{ConnectDB.GetCon( );ResultSetrs=ConnectDB.ExecuteSql(s1);while(rs.next( )){a=rs.getString(1);b=rs.getString(2);c=rs.getInt(3);d=rs.getInt(4);//System.out.println(a+b+c+d);//test//下面又是要注意的地方Object[]cells={a,b,c,d};table.addRow(cells);}}catch(SQLExceptionex){ex.printStackTrace( );}}}JTable中更正后的数据怎样保存到数据库中?点击19回复0?快捷回复*IP公布于2010-03-0309:25:411编了一个关于学生信息的程序,在对jtable插入,删除几行,更正数据今后,想点Jtable中全部数据存到数据库中,代替数据库中原有数据。我不知道该怎么做,网上找了许久也没找到。一段代码以下:classShowextendsJPanelimplementsActionListener{//显示学生信息DefaultTableModeldtm;JTabletable;Objecta[][];Objectname[]={"学号","姓名","性别","出寿辰期","民族","籍贯","专业","身高","体重"};JButtonconserve,insert,del;Connectioncon;Statementsql;ResultSetrs;Show( ){//把数据库中的数据放到JTable中try{con=DriverManager.getConnection("jdbc:odbc:hello","","");sql=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);rs=sql.executeQuery("SELECT*FROMmessage");rs.last( );intlastNumber=rs.getRow( );a=newObject[lastNumber][9];intk=0;rs.beforeFirst( );while(rs.next( )){a[k][0]=rs.getString(1);a[k][1]=rs.getString(2);a[k][2]=rs.getString(3);a[k][3]=rs.getDate(4);a[k][4]=rs.getString(5);a[k][5]=rs.getString(6);a[k][6]=rs.getString(7);a[k][7]=rs.getDouble(8);a[k][8]=rs.getDouble(9);k++;}con.close( );}catch(SQLExceptione){}insert=newJButton("插入信息");del=newJButton("删除信息");conserve=newJButton("保存信息");insert.addActionListener(this);del.addActionListener(this);conserve.addActionListener(this);dtm=newDefaultTableModel(a,name);table=newJTable(dtm);JScrollPanejt=newJScrollPane(table);setLayout(newBorderLayout( ));add(jt,BorderLayout.NORTH);JPaneljb=newJPanel( );jb.add(insert);jb.add(del);jb.add(conserve);jb.setBackground(Color.pink);add(jb,BorderLayout.CENTER);setVisible(true);validate( );}publicvoidactionPerformed(ActionEvente){if(e.getSource( )==insert){//插入intn=table.getSelectedRow( );dtm.insertRow(n+1,newObject[]{});}elseif(e.getSource( )==del){//删除intn=table.getSelectedRow( );dtm.removeRow(n);}elseif(e.getSource( )==conserve){//保存保存怎么写我就不知道了。}}}我有想过JTable里的数据放到一个二维数组中,再把二维数组导入数据库中,这样可不能够行?elseif(e.getSource( )==conserve){intn=table.getRowCount( );Objectb[][]=newObject[n][9];for(inti=0;i<n;i++)for(intj=0;j<9;j++)b[i][j]=dtm.getValueAt(i,j);}这一段可否是把JTable里的数据放到一个二维数组中?若是是,接下去该怎么写?哪位能依照我的代码把保存的代码写出来?elseif(e.getSource( )==conserve){//保存}截图:不要复制,粘贴,乱回答!我看不到你哪里把数据插入到数据库了,也不见你更正,你可是把数据盘问显示出来。一步是不能够的。你应该分开几个JTextField输入值,尔后拿JTextField.text在保存更正按钮事件intresult=sql.executeUpdata("insertinto表( )values('"+JTextField.text+"')");...连接数据库与JTable1连接数据库与JTableTableModel和读取数据库TableModel定义了存入和管理数据的方法,它还能够为每一列定义数据名,并且能够设置单元格可否可编写。它以一个二维数组的形式存入数据。下面有我关于怎样读取数据库资想到TableModel的一个例子:publicclassTbModelextendsAbstractTableModel{privatestaticfinallongserialVersionUID=1L;privateVectordata;privateVectortitles;Connectionconnect;Statementstate;ResultSetrs;publicmyTableModel( ){data=newVector( );try{Class.forName("com.mysql.jdbc.Driver");connect=DriverManager.getConnection("jdbc:mysql://localhost/javaproject","root","dddddd");state=connect.createStatement( );rs=state.executeQuery("select*fromproduct");while(rs.next( )){data.add(rs.getString(1));data.add(rs.getString(2));data.add(rs.getString(3));data.add(rs.getString(4));data.add(rs.getString(5));}}catch(ClassNotFoundExceptione){System.out.println("JDBCdrivernotloaded:\n"+e);}catch(SQLExceptione){System.out.println("Connectionfailed:\n"+e);}}titles=newVector( );titles.add("CATEGORY");titles.add("NAME");titles.add("PRICES");titles.add("QUANTITY");titles.add("ADDRESS");publicintgetRowCount( ){returndata.size( )/getColumnCount( );}publicintgetColumnCount( ){returntitles.size( );}publicObjectgetValueAt(introwIndex,intcolumnIndex){returndata.get((rowIndex*getColumnCount( ))+columnIndex);}publicStringgetColumnName(intcolumnIndex){StringcolName=newString( );if(columnIndex<=getColumnCount( ))colName=(String)titles.get(columnIndex);returncolName;}}当从AbstractTableModel继承一个类时,getRowCount( ),getColumnCount( ),和getValueAt(introwIndex,intcolumnIndex)等方法将自动成立(用Eclipse),记住上面所提的第三个方法,我们一会会用到。别的在上面的类中,getColumnName(intcolumnIndex)方法是用来定义列名字的。经过TableModel连接数据库和JTable接下来,你只需要把以下代码加入你的界面代码中就好:2读取你所选中单元格的值addMouseListener( )方法JTable能够用addMouseListenner( )方法来监听鼠标动作,下面的代码是当鼠标点下时,返回鼠标所点的单元格的行列索引:table.addMouseListener(newjava.awt.event.MouseAdapter( ){publicvoidmouseClicked(java.awt.event.MouseEvente){introw=((JTable)e.getSource( )).rowAtPoint(e.getPoint( ));intcol=((JTable)e.getSource( )).columnAtPoint(e.getPoint( ));}});现在你能够获取行列索引row和col啦!获取单元格里的值你还记得上一章我让你记住的那个方法吗?没错,getValueAt(introwIndex,intcolumnIndex)方法!把row和col带入到这个方法中就能返回单元格中的值了。JTabletable=newJTable(newTbModel( ))当你改变数据库时,JTable里的数据没有跟着改变?很简单的,别像我相同浪费两个礼拜找答案,把下面的两句话抄下来就好了:table.setModel(newTbModel( ));table.updateUI( );JTable在数据库中的应用标签:数据库取表格在JTable中显示分类:技术笔录2007-05-2315:47importjava.awt.*;importjava.awt.event.*;importjava.sql.*;importjavax.swing.*;importjavax.swing.table.DefaultTableModel;publicclassTest_JTableextendsJFrameimplementsActionListener{JLabeljlabel=newJLabel("显示数据库中的数据");JTablejtable=newJTable( );JScrollPanejscrollpane=newJScrollPane(jtable);//将表格加个转动条JButtondisplay=newJButton("显示数据列表");Test_JTable(Strings){super(s);this.setLayout(newBorderLayout( ));this.add(jlabel,BorderLayout.NORTH);this.add(jscrollpane,BorderLayout.CENTER);this.add(display,BorderLayout.SOUTH);display.addActionListener(this);this.setSize(250,200);//设置JFrame窗口大小this.setVisible(true);//设置窗口显示true}publicvoidactionPerformed(ActionEvente){if(e.getSource( )==display){String[]col={"学号","姓名","电话号码"};DefaultTableModelmm=newDefaultTableModel(col,0);//定义一个表的模板try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//加载access数据库驱动}catch(ClassNotFoundExceptione1){e1.printStackTrace( );}try{Connectionconn=DriverManager.getConnection("jdbc:odbc:student");//建立连接这里student为数据库名Statementstmt=conn.createStatement( );ResultSetrs=stmt.executeQuery("select*fromstudent");//将盘问获取的结果集给rswhile(rs.next( )){Stringid=rs.getString("id");Stringname=rs.getString("name");Stringtel=rs.getString("tel");String[]str_row={id,name,tel};//将一行的数据存在str_row字符串数组里mm.addRow(str_row);//增加在表模板中}jtable.setModel(mm);//将jtable这个表设置为方才定义的模板this.add(jscrollpane);//将加载了表的转动条在JFrame中显示}catch(SQLExceptione1){e1.getStackTrace( );}}}publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubnewTest_JTable("测试JTable");}}程序截图:[转]mportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.sql.*;importjava.io.*;publicclasstest{publictest( )throwsException{String[]names;inti,j,RowNum,ColNum;Object[][]info;Stringsqlstr;ResultSetres;JFramef=newJFrame("利用JTable显示数据库表");//连接数据库f.addWindowListener(newWindowAdapter( ){publicvoidwindowClosing(WindowEvente){System.exit(0);}});Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance( );Stringurl="jdbc:odbc:driver={MicrosoftAccessDriver(*.mdb)};DBQ=db1";Connectionconnection=DriverManager.getConnection(url,"","");Statementsta=connection.createStatement( );sqlstr="selectcount(*)fromtable1";//获取数据表的记录数和字段数res=sta.executeQuery(sqlstr);res.next( );RowNum=res.getInt(1);sqlstr="select*fromtable1";res=sta.executeQuery(sqlstr);ResultSetMetaDatarsmd=res.getMetaData( );ColNum=rsmd.getColumnCount( );names=newString[ColNum];//构造JTablefor(i=1;i<=ColNum;i++)names[i-1]=rsmd.getColumnName(i);info=newObject[RowNum][];i=0;while(res.next( )){info[i]=newObject[ColNum];for(j=1;j<=ColNum;j++){info[i][j-1]=res.getObject(j);}i++;}JTabletable=newJTable(info,names);table.setPreferredScrollableViewportSize(newDimension(400,50));JScrollPanescrollPane=newJScrollPane(table);Containercont=f.getContentPane( );cont.add(scrollPane);f.pack( );f.setLocation(300,300);f.setResizable(false);f.setVisible(true);}publicstaticvoidmain(String[]args)throwsException{newtest( );}}流程:1,new一个DefaultTableModel假设名字取为myTModel2,jTable.setModel(myTModel);3,从数据库中读出columnnames存在String[]colNames;(用ResultSetMetaData读)3,myTModel.addColumn(colNames)在表中增加列名4,逐行读出表内容,存入一个Vector中假设这个Vector名为newRow5,myTModel.addRow(newRow)请问编写JTable里的数据怎样提交给数据库我想实现的功能就是依照名字查找数据库的相应记录并把它从JTable显示出来,尔后编写JTable里的记录后写入数据库。但是编写JTable里的记录后写入数据库这个功能不会做请各位好手指点代码以下:importjava.sql.*;importjavax.swing.*;importjavax.swing.table.*;importjava.awt.BorderLayout;importjava.awt.event.*;importjavax.swing.Box;publicclassFinalTable{JFramejf=null;JPanelnorthpanel=null;JLabeljlName=newJLabel("名字");JLabelslName=newJLabel("模糊找寻");//名字的JTextFieldJTextFieldtfName=newJTextField(10);//模糊找寻JTextFieldJTextFieldstfName=newJTextField(10);//名字按钮JButtonbName=newJButton("search");//模糊找寻JButtonsbName=newJButton("search");JTabletable;JScrollPanescrollPane;ResultSetTableModelmodel;Stringdriver="com.mysql.jdbc.Driver";Stringurl="jdbc:mysql://:3306/test";Stringuser="root";Stringpassword="nintendo";Connectioncon;PreparedStatementpstmt;ResultSetrs;Statementstmt;StringtableName;Boxh=Box.createHorizontalBox( );publicFinalTable( ){try{Class.forName(driver);con=DriverManager.getConnection(url,user,password);}catch(Exceptione){e.printStackTrace( );}}publicJFramegetFrame( ){if(jf==null){jf=newJFrame("table");jf.add(getNorthPanel( ),BorderLayout.NORTH);jf.addWindowListener(newWindowAdapter( ){publicvoidwindowClosing(WindowEvente){try{if(con!=null){con.close( );System.out.println("conclose");}}catch(Exceptionex){ex.printStackTrace( );}}});jf.setSize(600,400);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//jf.setResizable(false);jf.setVisible(true);}returnjf;}publicJScrollPanegetScrollPane( ){returnthis.scrollPane;}publicJPanelgetNorthPanel( ){if(northpanel==null){northpanel=newJPanel( );northpanel.add(jlName);northpanel.add(tfName);//增加名字按钮找寻事件监听器bName.addActionListener(newSearchName( ));northpanel.add(bName);northpanel.add(h.add(Box.createHorizontalStrut(90)));northpanel.add(slName);northpanel.add(stfName);//增加模糊找寻按钮事件监听器sbName.addActionListener(newAboutSearchName( ));northpanel.add(sbName);}returnnorthpanel;}//名字找寻按钮事件监听类classSearchNameimplementsActionListener{publicvoidactionPerformed(ActionEvente){try{if(scrollPane!=null){getFrame( ).remove(scrollPane);}if(rs!=null){rs.close( );}Stringtemp=tfName.getText( );Stringsql="select*fromtestwherename=?";pstmt=con.prepareStatement(sql);pstmt.setString(1,temp);ResultSetrs=pstmt.executeQuery( );model=newResultSetTableModel(rs);table=newJTable(model);scrollPane=newJScrollPane(table);getFrame( ).add(scrollPane,BorderLayout.CENTER);//调用validate( )显示更新后的容器getFrame( ).validate( );}catch(Exceptionex){ex.printStackTrace( );}}}//模糊找寻时件监听类classAboutSearchNameimplementsActionListener{publicvoidactionPerformed(ActionEvente){try{if(scrollPane!=null){getFrame( ).remove(scrollPane);}if(rs!=null){rs.close( );}Stringtemp=stfName.getText( );System.out.println(temp);Stringsql="select*fromtestwherenamelike?";pstmt=con.prepareStatement(sql);pstmt.setString(1,"%"+temp+"%");ResultSetrs=pstmt.executeQuery( );model=newResultSetTableModel(rs);table=newJTable(model);scrollPane=newJScrollPane(table);getFrame( ).add(scrollPane,BorderLayout.CENTER);getFrame( ).validate( );}catch(Exceptionex){ex.printStackTrace( );}}}publicstaticvoidmain(String[]args){FinalTableft=newFinalTable( );ft.getFrame( );}}classResultSetTableModelextendsAbstractTableModel{privateResultSetrs;privateResultSetMetaDatarsmd;publicResultSetTableModel(ResultSetrs){this.rs=rs;try{rsmd=rs.getMetaData( );}catch(Exceptione){e.printStackTrace( );}}publicStringgetColumnName(intc){String[]str={"id","名字","年龄","整型num","字符型num"};try{returnstr[c];}catch(Exceptione){e.printStackTrace( );return"";}}publicintgetColumnCount( ){try{returnrsmd.getColumnCount( );}catch(Exceptione){e.printStackTrace( );return0;}}publicObjectgetValueAt(intr,intc){try{rs.absolute(r+1);returnrs.getObject(c+1);}catch(Exceptione){e.printStackTrace( );returnnull;}}publicintgetRowCount( ){try{rs.last( );returnrs.getRow( );}catch(Exceptione){e.printStackTrace( );return0;}}publicbooleanisCellEditable(introw,intcolumn){returntrue;}publicvoidsetValueAt(ObjectaValue,introw,intcolumn){try{rs.absolute(row+1);rs.updateObject(column+1,aValue);rs.updateRow( );fireTableCellUpdated(row,column);}catch(Exceptione){e.printStackTrace( );}}}复制代码数据表以下:createtabletest(idintprimarykeyauto_increment,namevarchar(255),ageint,i_numint,s_numvarchar(255));insertintotestvalues(null,'123',13,123)复制代码《疯狂Java讲义》节有完满的代码示范:下面程序就是书中示例,JTable直接显示数据表数据,当你编写JTable时,数据表内数据随之改变。publicclassTestTableModel{JFramejf=newJFrame("数据表管理工具");privateJScrollPanescrollPane;privateResultSetTableModelmodel;//用于装载数据表的JComboBoxprivateJComboBoxtableNames=newJComboBox( );privateJTextAreachangeMsg=newJTextArea(4,80);privateResultSetrs;privateConnectionconn;privateStatementstmt;publicvoidinit( ){//为JComboBox增加事件监听器,当用户选择管理其他数据表tableNames.addActionListener(newActionListener( ){publicvoidactionPerformed(ActionEventevent){try{//若是装载JTable的JScrollPane不为空if(scrollPane!=null){//从主窗口中删除表格jf.remove(scrollPane);}//从JComboBox中取出用户试图管理的数据表的表名StringtableName=(String)tableNames.getSelectedItem( );//若是结果集不为空,则关闭结果集if(rs!=null){rs.close( );}Stringquery="select*from"+tableName;//盘问用户选择的数据表rs=stmt.executeQuery(query);//使用盘问到的ResultSet创办TableModel对象model=newResultSetTableModel(rs);//为TableModel增加监听器,监听用户的更正model.addTableModelListener(newTableModelListener( ){publicvoidtableChanged(TableModelEventevt){introw=evt.getFirstRow( );intcolumn=evt.getColumn( );changeMsg.append("更正的列:"+column+",更正的行:"+row+"更正后的值:"+model.getValueAt(row,column));}});//使用TableModel创办JTable,并将对应表格增加到窗口中JTabletable=newJTable(model);scrollPane=newJScrollPane(table);jf.add(scrollPane,BorderLayout.CENTER);jf.validate( );}catch(SQLExceptione){e.printStackTrace( );}}});JPanelp=newJPanel( );p.add(tableNames);jf.add(p,BorderLayout.NORTH);jf.add(newJScrollPane(changeMsg),BorderLayout.SOUTH);try{//获取数据库连接conn=getConnection( );//获取数据库的MetaData对象DatabaseMetaDatameta=conn.getMetaData( );//创办Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);//盘问当前数据库的全部数据表ResultSettables=meta.getTables(null,null,null,newString[]{"TABLE"});//将全部数据表增加到JComboBox中while(tables.next( )){tableNames.addItem(tables.getString(3));}tables.close( );}catch(IOExceptione){e.printStackTrace( );}catch(Exceptione){e.printStackTrace( );}jf.addWindowListener(newWindowAdapter( ){publicvoidwindowClosing(WindowEventevent){try{if(conn!=null)conn.close( );}catch(SQLExceptione){e.printStackTrace( );}}});jf.pack( );jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setVisible(true);}priv
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论