问题描述
问题:增加一列和删除一列中用到的for循环。具体有什么用。importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.*;importjavax.swing.table.*;importjava.util.Vector;publicclassJ_TableextendsJFrame{DefaultTableModelm_data;JTablem_view;publicJ_Table(){super("表格应用示例");Containerc=getContentPane();c.setLayout(newFlowLayout());inti;//添加四个按钮JButton[]b={newJButton("添加行"),newJButton("添加列"),newJButton("删除行"),newJButton("删除列")};for(i=0;i<4;i++)c.add(b[i]);m_data=newDefaultTableModel();//创建一个空的数据表格m_view=newJTable(m_data);m_view.setPreferredScrollableViewportSize(newDimension(300,150));//设置表格的显示区域大小m_view.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);JScrollPanesPane=newJScrollPane(m_view);c.add(sPane);b[0].addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){mb_addRow();System.out.println("添加一行");}//方法actionPerformed结束}//实现接口ActionListener的内部类结束);//方法addActionListener调用结束b[1].addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){mb_addColumn();System.out.println("添加一列");}//方法actionPerformed结束}//实现接口ActionListener的内部类结束);//方法addActionListener调用结束b[2].addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){mb_deleteRow();System.out.println("删除当前行");}//方法actionPerformed结束}//实现接口ActionListener的内部类结束);//方法addActionListener调用结束b[3].addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){mb_deleteColumn();System.out.println("删除当前列");}//方法actionPerformed结束}//实现接口ActionListener的内部类结束);//方法addActionListener调用结束}//J_Table构造方法结束publicvoidmb_addColumn()//添加一列{intcNum=m_data.getColumnCount();intrNum=m_data.getRowCount();Strings="列"+(cNum+1);intc=m_view.getSelectedColumn();System.out.println("当前列号为:"+c);if(cNum==0||rNum==0||c<0){m_data.addColumn(s);return;}//if结构结束c++;Vector<String>vs=mb_getColumnNames();//表头的处理vs.add(c,s);Vectordata=m_data.getDataVector();/*for(inti=0;i<data.size();i++){Vectore=(Vector)data.get(i);e.add(c,newString(""));}*///for循环结束m_data.setDataVector(data,vs);}//方法mb_addColumn结束publicvoidmb_addRow()//添加一行{intcNum=m_data.getColumnCount();if(cNum==0)mb_addColumn();intrNum=m_data.getRowCount();intr=mb_getRowCurrent();System.out.println("当前行号为:"+r);m_data.insertRow(r,(Vector)null);}//方法mb_addRow结束publicvoidmb_deleteColumn()//删除一列{intcNum=m_data.getColumnCount();if(cNum==0)return;intc=m_view.getSelectedColumn();if(c<0)c=0;System.out.println("当前列号为:"+c);Vector<String>vs=mb_getColumnNames();//表头的处理vs.remove(c);Vectordata=m_data.getDataVector();/*for(inti=0;i<data.size();i++){Vectore=(Vector)data.get(i);e.remove(c);}*///for循环结束m_data.setDataVector(data,vs);}//方法mb_deleteColumn结束publicvoidmb_deleteRow()//删除一行{intrNum=m_data.getRowCount();if(rNum>0){intrEdit=mb_getRowCurrent();m_data.removeRow(rEdit);}}//方法mb_deleteRow结束publicVector<String>mb_getColumnNames()//取得列名称{Vector<String>vs=newVector<String>();intcNum=m_data.getColumnCount();for(inti=0;i<cNum;i++)vs.add(m_data.getColumnName(i));return(vs);}//方法mb_getColumnNames结束publicintmb_getRowCurrent()//取得当前行的行号{intr=m_view.getSelectedRow();if(r<0)r=0;return(r);}//方法mb_getRowCurrent结束publicstaticvoidmain(Stringargs[]){JFrameapp=newJ_Table();app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);app.setSize(350,250);app.setVisible(true);}//方法main结束}//类J_Table结束
解决方案
解决方案二:
因为是一整“列”数据是以“行”为单位放在table中的假设这个table是一个Vector的话,那每个整“行”就是这个Vector的元素所以要删除“列”的话,要把每一“行”数据的这个“列”位置的元素移除加入也是一个道理
解决方案三:
取出表格里面包含的所有数据对象,删除相应列的数据取出表格中包含的所有数据对象,在指定列位置添加空值
解决方案四:
for(inti=0;i<data.size();i++){Vectore=(Vector)data.get(i);e.add(c,newString(""));}当是将Table中数据存入Vectore中。。在后面程序中e这个也有没有用到。是不是可有可无?
解决方案五:
Vectore=(Vector)data.get(i);这个e是一个对象的引用啊当然不是可有可无e.add(c,newString(""));相当于data.get(i).add(c,newString(""));对e的操作,实际上就是对data.get(i)的操作
解决方案六:
但是如果删掉那2个FOR循环。对程序没有影响的。。至少我测试不出来哪里有什么问题。。请帮忙测试下。。谢谢