最幹脆的辦法是重建TableModel,不過這顯然不是個好辦法,但可行.

解决方案 »

  1.   

    removeRow 
    public void removeRow(int row) 
           Removes the row at row from the model. 
           Notification of the row being removed will be sent to all the listeners.
           Parameters:
            row - the row index of the row to be   removed
           Throws:
            ArrayIndexOutOfBoundsException - if the row was invalid
      

  2.   

    建议扩展AbstractTableModel
    在AbstractTableModel中对数据进行操作,如添加,删除,然后重设置表格的MODEL
      

  3.   

    用不着这么麻烦,在第二次crate间加一个delete 行语句就可
      

  4.   

    import javax.swing.table.AbstractTableModel;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;public class TableModel1{
         
        public TableModel1() {
        
        JFrame f = new JFrame();
        MyTable mt=new MyTable();
        JTable t=new JTable(mt);
        t.setPreferredScrollableViewportSize(new Dimension(550, 30));
            JScrollPane s = new JScrollPane(t);
            
            f.getContentPane().add(s, BorderLayout.CENTER);
        f.setTitle("JTable1");
            f.pack();
            f.setVisible(true);
            
            f.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
        }    public static void main(String args[]) {
        
            new TableModel1();
        }
    }class MyTable extends AbstractTableModel{    Object[][] p = {
            {"阿呆", new Integer(66), 
              new Integer(32), new Integer(98), new Boolean(false),new Boolean(false)},
            {"阿瓜", new Integer(85), 
              new Integer(69), new Integer(154), new Boolean(true),new Boolean(false)},          
        };    String[] n = {"姓名", 
                          "语文",
                          "数学",
                          "总分",
                          "及格",
      "作弊"};    public int getColumnCount() {
            return n.length;
        }    public int getRowCount() {
            return p.length;
        }    public String getColumnName(int col) {
            return n[col];
        }    public Object getValueAt(int row, int col) {
            return p[row][col];
        }

    public Class getColumnClass(int c) {
            
        return getValueAt(0, c).getClass();
        
    }
    }实现清除的代码你就自己写一个直接对Object[][] p进行操作的方法吧
      

  5.   

    这就是那个传说中的扩展 AbstractTableModel的吧,只能显示两行定义了的数据,我最需要的就是对它清除的代码,以下是我在你的代码上加的一个按钮来清空public class TableModel1 implements ActionListener{
        JButton del; 
        public TableModel1() {
        
        JFrame f = new JFrame();
        del=new JButton("delete");
        del.addActionListener(this);
        MyTable mt=new MyTable();
        JTable t=new JTable(mt);
        t.setPreferredScrollableViewportSize(new Dimension(550, 30));
            JScrollPane s = new JScrollPane(t);
            
            f.getContentPane().add(s, BorderLayout.CENTER);
            f.getContentPane().add(del,BorderLayout.SOUTH);
        f.setTitle("JTable1");
            f.pack();
            f.setVisible(true);
            
            f.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
        }
        public void actionPerformed(ActionEvent e)
    {
    if(e.getSource()==del)

    Object[][] p={}; //这是错误的!!不知道如何
    }                  //写555555555
        public static void main(String args[]) {
        
            new TableModel1();
        }
    }
      

  6.   

    Object[][] p={}; 改成:
          for(int i=0;i<p.length;i++){
               for(int j=0;j<p[i].length;j++){
                   p[i][j]="";
               }
           }
      

  7.   

    另外你可以提供一个构造器指定Object[][] p的大小,在构造器中new一个,
    再添加一个addRow(Object[] p1)方法,需考虑添加的行越界的情况.可参照StringBuffer()的做法,越界动态增长.
      

  8.   

    把Object[][] p={}; 改成:
          for(int i=0;i<p.length;i++){
               for(int j=0;j<p[i].length;j++){
                   p[i][j]="";
               }
           }
    后通不过,55555555555,现在我把我的那个程序给你看看哈,我要的效果就是再次查询时,第一次的结果不在
    帮忙改改哈!!!!!import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.sql.*;
    import java.net.*;
    class chaxun extends JFrame implements ActionListener,ItemListener
    {
    Object a[][];Object columnName[]={"isbn","书名","作者","总数量","外借","出版社"};
    JTable table;JButton queding;
    Container container;
    Connection con;Statement sql;ResultSet rs;
    JProgressBar p_bar;JPanel panel;JLabel label,label2;JTextField text;
    JComboBox box1;
    String isbn,book,author,total,lend,publish;
    chaxun()
    {
    super("数据查询");
    String[] s={"按出版社","按作者","按书名"};
    setSize(600,400);
    a=new Object[15][6];
    table=new JTable(a,columnName);
    panel=new JPanel();
    label=new JLabel("请输入出版社",JLabel.CENTER);
    label2=new JLabel("",JLabel.CENTER);
    text=new JTextField(30);
    queding=new JButton("Search");
    box1=new JComboBox(s);
    panel.setLayout(new GridLayout(1,4));
    panel.add(label);panel.add(text);panel.add(box1);panel.add(queding);
    box1.addItemListener(this);
    queding.addActionListener(this);
    addWindowListener(new WindowAdapter()
          {public void windowClosing(WindowEvent e)
             {
              System.exit(0);
             }
          });
     queding.addActionListener(this);
     p_bar=new JProgressBar(JProgressBar.VERTICAL,0,50);
     p_bar.setStringPainted(true);
     container=getContentPane();
     container.add(panel,BorderLayout.NORTH);
     container.add(new JScrollPane(table),BorderLayout.CENTER);
     container.add(p_bar,BorderLayout.WEST);
     container.add(label2,BorderLayout.SOUTH);     
    }
    public void itemStateChanged(ItemEvent e)
    {
    if(e.getItemSelectable()==box1)
    {
    if(box1.getSelectedIndex()==2)
      label.setText("请输入按书名");
     else if(box1.getSelectedIndex()==1)
      label.setText("请输入作者");
    else if(box1.getSelectedIndex()==0)
    label.setText("请输入出版社");
    }
    }
    public void actionPerformed(ActionEvent evt)
    {
    if(evt.getSource()==queding)       
    {
    //Object[][] p={}; 改成:
                /*for(int i=0;i<a.length;i++){
                   for(int j=0;j<a[i].length;j++){
                       a[i][j]="";
                    }
                }*/
                                   

    int i=0;
    try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    }
    catch(ClassNotFoundException e){}
    try
    {
    con=DriverManager.getConnection("jdbc:odbc:tushu","","");
    sql=con.createStatement();
    if(label.getText()=="请输入按书名")
    {
    rs=sql.executeQuery("SELECT * FROM book ");
    while(rs.next())          //String isbn,book,author,total,lend,publish;
    {
    isbn=rs.getString(1);
    book=rs.getString(2);
    author=rs.getString(3);
    total=rs.getString(4);
    lend=rs.getString(5);
    publish=rs.getString(6);
    if (book.equals(text.getText().trim()))
    {
    a[i][0]=isbn;
    a[i][1]=book;
    a[i][2]=author;
    a[i][3]=total;
    a[i][4]=lend;
    a[i][5]=publish;
    i++;


    label2.setText("共找到了"+i+"本书");  

    }con.close();
       }
    else if(label.getText()=="请输入作者")
    {
    rs=sql.executeQuery("SELECT * FROM book ");
    while(rs.next())          //String isbn,book,author,total,lend,publish;
    {
    isbn=rs.getString(1);
    book=rs.getString(2);
    author=rs.getString(3);
    total=rs.getString(4);
    lend=rs.getString(5);
    publish=rs.getString(6);
    if (author.equals(text.getText().trim()))
    {
    a[i][0]=isbn;
    a[i][1]=book;
    a[i][2]=author;
    a[i][3]=total;
    a[i][4]=lend;
    a[i][5]=publish;
    i++;

    }  label2.setText("共找到了"+i+"本书"); 

    }con.close();
       }
    else if(label.getText()=="请输入出版社")
    {
    rs=sql.executeQuery("SELECT * FROM book ");
    while(rs.next())          //String isbn,book,author,total,lend,publish;
    {
    isbn=rs.getString(1);
    book=rs.getString(2);
    author=rs.getString(3);
    total=rs.getString(4);
    lend=rs.getString(5);
    publish=rs.getString(6);
    if (publish.equals(text.getText().trim()))
    {
    a[i][0]=isbn;
    a[i][1]=book;
    a[i][2]=author;
    a[i][3]=total;
    a[i][4]=lend;
    a[i][5]=publish;
    i++;

    }  label2.setText("共找到了"+i+"本书"); 

    }con.close();
     }
    }
    catch(SQLException e1){}

    }
    }
        
    }
      

  9.   

    数组a没有初始化! a = new Object[5][6];
    再这样:
    //...
    a[i][0]=isbn;
    a[i][1]=book;
    a[i][2]=author;
    a[i][3]=total;
    a[i][4]=lend;
    a[i][5]=publish;
    i++;
    if(i>=a.length) a=extendObjectArray(a); //调用动态增加数组方法
    //...
    动态增加数组方法:
    private Object extendObjectArray(Object[][] a){
            Object[][] array = new Object[a.length*2][a[0].length];
            for(int i=0;i<a.length;i++){
                for(int j=0;j<a[i].length;j++){
                    array[i][j] = a[i][j]; //保存a中的值
                }
            }
            for(int i = a.length;i<array.length;i++ ){
                for(int j=0;j<array[i].length;j++){
                    array[i][j] = "";
                }
            }
            return array;
        }
      

  10.   

    返回值写错了,应该是
    private Object[][] extendObjectArray(Object[][] a){
      

  11.   

    i 是查到的记录条数,a.length是什么呢,通过array[i][j] = a[i][j]; //保存a中的值
    后为什么还要  array[i][j] = "";呢??    我是不是有点笨呢??呵呵,顺便把你的邮箱给我吧,如果我的这个还没弄出来,我就把我的文件传到你那里,帮我改改好吗??谢了
      

  12.   

    a是个2维数组a.length可以看成是一维数组a[]的长度,即a[][]的行数
    array[i][j] = "";初始化为空字符串对象.如果不初始化,报表显示的时候会抛出NullPointException异常.(表格中显示的字符串是通过array[i][j].toString得到的)
    还是要多自己动动手的,这样才有领悟!!
      

  13.   

    Thank You Very Much!请问你是什么职业呢??经常是半夜还在上网的
      

  14.   

    Thank You Very Much!请问你是什么职业呢??经常是半夜还在上网的
      

  15.   

    我看了,^----^难道你是xx
    不是xxxhehe 工资有好多呢,大概吧,
    我也快工作了,(大三下了)想有个底,加上我干这行的概率不是很大
      

  16.   

    你可以将TableModel中的数据设为Vector麻,为什么非要用数组?