您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 一个详细的JTable使用例子
最近需要使用JTable,第一次使用,很多不懂,到网上找了很多资料和例子,发现很多例子都没有完全的实现操作数据库里一张表的数据,摸了两天终于懂了一点,写了一个例子,把代码直接复制,修改一下数据库的连接就可以运行了.使用JTable操作数据库的一张表,实现增删改,显示表里所有的数据,点击''添加''按钮在表格插入一行填写数据保存到数据库,可一次插入多行,一次可选择任意多行进行删除,一次可以修改多行的值.有写得不好的地方希望大家指出,一起进步.共九个类:一:packageproduct;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;importjavax.swing.table.AbstractTableModel;publicclassProductTableModelextendsAbstractTableModel{/***神恋科技:*//**changeList用来存放被修改过的数据值,这样做是为了一次修改多行多值,*保存的对象是ChangedProduct,只记录被修改过的值.*/privatestaticListchangeList=newArrayList();privateListlist=newArrayList();privateString[]column={Product_id,ProductName,ProductDescription,Status};publicProductTableModel(){}publicProductTableModel(Listlist){this();setList(list);}publicintgetColumnCount(){returncolumn.length;}publicintgetRowCount(){returnlist.size();}/***getValueAt方法就是使得数据在Table显示出来,给每个单元格设值*/publicObjectgetValueAt(intarg0,intarg1){ProductBeanp=(ProductBean)list.get(arg0);returngetPropertyValueByCol(p,arg1);}publicvoidaddRow(intindex,ProductBeanp){if(index0||indexlist.size()-1){list.add(p);fireTableRowsInserted(list.size(),list.size());}else{list.add(index+1,p);fireTableRowsInserted(index,index);}}publicbooleandeleteRow(intindex){if(index=0&&indexlist.size()){list.remove(index);fireTableRowsDeleted(index,index);returntrue;}elsereturnfalse;}publicbooleansaveRow(intindex,ProductBeanp){if(index=0&&indexlist.size()){list.set(index,p);fireTableRowsUpdated(index,index);returntrue;}elsereturnfalse;}publicProductBeangetRow(intindex){if(index=0&&indexlist.size()){return(ProductBean)list.get(index);}elsereturnnull;}publicListgetNewRow(){Listlist=newArrayList();ListlistProduct=getList();Iteratorit=listProduct.iterator();while(it.hasNext()){ProductBeanp=newProductBean();p=(ProductBean)it.next();if(p.getProduct_id()==0){list.add(p);}}returnlist;}publicListgetList(){returnlist;}publicvoidsetList(Listlist){this.list=list;fireTableDataChanged();}publicStringgetColumnName(inti){returncolumn[i];}publicvoidsetColumn(String[]column){this.column=column;}publicObjectgetPropertyValueByCol(ProductBeanp,intcol){switch(col){case0:returnp.getProduct_id();case1:returnp.getProduct_name();case2:returnp.getProduct_desc();case3:returnp.getProduct_status();}returnnull;}publicvoidsetPropertyValueByCol(ProductBeanp,Stringvalue,intcol){switch(col){case1:p.setProduct_name(value);break;case2:p.setProduct_desc(value);break;case3:p.setProduct_status(value);break;}fireTableDataChanged();}publicbooleanisCellEditable(introw,intcolumn){returntrue;}/***setValueAt方法是使增加或修改值的时候生效,aValue就是你在单元格填的值,*要把这些值保存到数据源中*/publicvoidsetValueAt(ObjectaValue,introwIndex,intcolumnIndex){ProductBeanp=(ProductBean)list.get(rowIndex);setPropertyValueByCol(p,aValue.toString(),columnIndex);this.fireTableCellUpdated(rowIndex,columnIndex);}publicstaticListgetChangeList(){returnchangeList;}publicstaticvoidsetChangeList(ListchangeList){ProductTableModel.changeList=changeList;}}二:packageproduct;importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.Container;importjava.awt.Dimension;importjava.awt.FlowLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTable;importjavax.swing.table.DefaultTableColumnModel;publicclassProductFrameextendsJFrame{/***神恋科技:*/privateJPanelpanelTop=null;privateJLabellabHeader=null;privateJPanelpanelBottom=null;privateJButtonadd=null;privateJButtondelete=null;privateJButtonsave=null;privateJScrollPanescroll=null;privateJTabletable=null;privateProductTableModelmodel=null;privateListlistProduct=null;publicProductTableModelgetModel(){if(null==model){model=newProductTableModel(listProduct);//给model添加一个监听,当修改的时候将触发该事件,代表事件的类是ChangeEventmodel.addTableModelListener(newChangeEvent(model));returnmodel;}returnmodel;}publicJLabelgetLabHeader(){if(null==labHeader){labHeader=newJLabel(MaintainceProductInformation);returnlabHeader;}returnlabHeader;}publicJTablegetTable(){if(null==table){table=newJTable(getModel());table.setEnabled(true);table.setRowSelectionAllowed(true);table.setBackground(Color.YELLOW);/***隐藏第一列ID,不显示出来*/DefaultTableColumnModeldcm=(DefaultTableColumnModel)table.getColumnModel();dcm.getColumn(0).setMinWidth(0);dcm.getColumn(0).setMaxWidth(0);returntable;}returntable;}publicJScrollPanegetPanTable(){if(null==scroll){scroll=newJScrollPane();scroll.setViewportView(getTable());returnscroll;}returnscroll;}publicJPanelgetPanelTop(){if(null==panelTop){panelTop=newJPanel();panelTop.setLayout(newFlowLayout(FlowLayout.CENTER));panelTop.add(getLabHeader());returnpanelTop;}returnpanelTop;}publicJPanelgetPanelBottom(){if(null==panelBottom){panelBottom=newJPanel();panelBottom.setLayout(newFlowLayout(F
本文标题:一个详细的JTable使用例子
链接地址:https://www.777doc.com/doc-5274322 .html