import java.awt.BorderLayout;
import java.awt.Dimension;
import java.sql.ResultSet;
import java.sql.SQLException;import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel; @SuppressWarnings("serial")
class MyTableDemo extends JPanel{    public MyTableDemo() {
        //声明自己的表格,并添加到JTable中
        MyTableModel myModel = new MyTableModel();
        myModel.init();
        JTable table = new JTable(myModel);
        table.setPreferredScrollableViewportSize(new Dimension(500, 70));        //将表格添加到可滚动的面板
        JScrollPane scrollPane = new JScrollPane(table);        //将滚动面板添加到窗体
        this.add(scrollPane, BorderLayout.CENTER);
        this.setVisible(true);
    }
    public static void main(String[] args) {
        JFrame.setDefaultLookAndFeelDecorated(true);
           @SuppressWarnings("unused")
MyTableDemo frame = new MyTableDemo();
           
       }
    class MyTableModel extends AbstractTableModel {
        String[] columnNames;
        Object[][] data;
        public void init()
        {
        
         ResultSet r=Database.stmt_select("select * from course");
         try {
         columnNames =new String[] {"课程编号",
                        "课程名称",
                        "课程代码",
                        "是否已选"};
            
while(r.next())
{

data=new Object[][]{
{r.getString(1), r.getString(2),
r.getString(3),new Boolean(r.getString(4))}            };

System.out.print("tr"+r.getString(1));
}
} catch (SQLException e) {
e.printStackTrace();
}
        
        }
        public int getColumnCount() {
//         System.out.println(columnNames.length);
            return columnNames.length;
        }
        public int getRowCount() {
            return data.length;
        }        public String getColumnName(int col) {
            return columnNames[col];
            
        }        public Object getValueAt(int row, int col) {
            return data[row][col];
        }        @SuppressWarnings("unchecked")
public Class getColumnClass(int c) {
            return getValueAt(0, c).getClass();
        }        public boolean isCellEditable(int row, int col) {
            if (col < 2) {
                return false;
            } else {
                return true;
            }
        }        public void setValueAt(Object value, int row, int col) {
                System.out.println("修改数据位置: " + row + "," + col
                                   + " 新数据为: " + value);            data[row][col] = value;
            fireTableCellUpdated(row, col);                System.out.println("表格新数据:");
                printDebugData();        }        private void printDebugData() {
            int numRows = getRowCount();
            int numCols = getColumnCount();            for (int i=0; i < numRows; i++) {
                System.out.print("    行 " + i + ":");
                for (int j=0; j < numCols; j++) {
                    System.out.print("  " + data[i][j]);
                }
                System.out.println();
            }
            System.out.println("--------------------------");
        }
    }    
}这样从数据库中取直只能在table中显示数据库中的一行的值,我想把数据库中的所有值都显示到表格里,但不知道怎么用循环控制,还是ResultSet对象有什么特别的方法可以这样做,希望大家不吝赐教!

解决方案 »

  1.   


    while(r.next())
                    {
                        
                        data=new Object[][]{
                                {r.getString(1), r.getString(2),
                                    r.getString(3),new Boolean(r.getString(4))}                           };
                        
                        System.out.print("tr"+r.getString(1));
                    }你可以把你的data输出来看看   就只有一行
    循环的时候  你的data就总是在变化(一行)  而不是把新的数据 一层一层的加上去 ~
      

  2.   

    date = new Object[总记录数][4]
    int k = 0 ;
    while(r.next()){
     date[k][0] = r.getString(1);
     date[k][1] = r.getString(2);
     date[k][2] = r.getString(3);
     date[k++][3] = r.getString(4);
    }
      

  3.   

    楼上的可行,就是“总记录数”可能得再搜一次资料库了。
    ResultSet r=Database.stmt_select("select count(*) from course");
    int size = 0;
    if(r.next())
    {
       size = r.getInt(1);
     }
      

  4.   

    你也可以不预先设置总的记录数,这样可以:
    String[] head = new String[] {"课程编号","课程名称","课程代码","是否已选"};
    Object[][] result = new Object[0][];
    DefaultTableModel model = new DefaultTableModel(result, head);
    Vector<Object> rowData = null;
    while (r.next()){
      rowData = new Vector<Object>();
      rowData.add(r.getString(1));
      rowData.add(r.getString(2));
      rowData.add(r.getString(3));
      rowData.add(new Boolean(r.getString(4)));
      model.addRow(rowData);
    }
    table.setModel(model);
      

  5.   


    int k = 0 ; 
             ResultSet r=Database.stmt_select("select * from course");
             try {
             columnNames =new String[] {"课程编号",
                            "课程名称",
                            "课程代码",
                            "是否已选"};
            
             data= new Object[][]{};                      
     while(r.next()){ 
     data[k][0] = r.getString(1); 
     data[k][1] = r.getString(2); 
     data[k][2] = r.getString(3); 
     data[k++][3] = r.getString(4); 
     System.out.println("data[1][0]"+data[1][0]+r.getString(1));我这样写 发觉连表格都没有? 怎么回事?
      

  6.   

    那怎么把result跟rowData关联起来
      

  7.   


     try {
             int size = 0; 
             if(r.next()) 
             { 
               size = r.getInt(1); 
             }          columnNames =new String[] {"课程编号",
                            "课程名称",
                            "课程代码",
                            "是否已选"};
            
             data= new Object[size][]{};//这个size不能用的说,报错!                      
     while(r.next()){ 
     data[k][0] = r.getString(1); 
     data[k][1] = r.getString(2); 
     data[k][2] = r.getString(3); 
     data[k++][3] = r.getString(4); 
     System.out.println("data[1][0]"+data[1][0]+r.getString(1));
     
     }
             }catch(Exception e)
             {
            
             }