刚看了DefaultTableModel,自己练习下,参考网上的方法可以读出数据到table里,我自己用addRow的怎么会显示不出来数据,也没提示错误,有点晕了,拜托各位给看看:
数据表的机构如下:
DROP TABLE IF EXISTS jtabletest;
   CREATE TABLE jtabletest
(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
age INT,
birthday DATE,
school VARCHAR(30) NOT NULL
);
INSERT INTO `jtabletest` (`name`, `age`, `birthday`, `school`) VALUES ('jxtm','20','2000-01-21','北京大学');
INSERT INTO `jtabletest` (`name`, `age`, `birthday`, `school`) VALUES ('bsdlover','24','1989-01-21','清华大学');下面这段代码可以实现:import java.awt.BorderLayout;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.ResultSetMetaData;import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;
import java.util.Vector;public class Test {
public static final String DBDRIVER = "com.mysql.jdbc.Driver";
public static final String DBURL = "jdbc:mysql://localhost:3306/jxtmtest";
public static final String DBUSER = "root";
public static final String DBPASS = "123456";
public static void main(String args[]) throws Exception{
JFrame frame = new JFrame("Jtable测试");
Connection conn =  null;
JTable table;
DefaultTableModel myTable=new DefaultTableModel();
Class.forName(DBDRIVER);
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
      Statement stmt=conn.createStatement();
      ResultSet rs=stmt.executeQuery("select * from jtabletest");
      ResultSetMetaData metaData = rs.getMetaData();
      int number=metaData.getColumnCount();//表的总列数
      Vector<Object> rows=new Vector<Object>();
      Vector<Object> columnNames=new Vector<Object>();
      for(int num=0;num<number;num++){
columnNames.addElement(metaData.getColumnName(num+1));
}
while(rs.next()){
Vector<Object> newRow = new Vector<Object>();
for (int i = 1; i <= number; i++) {
newRow.addElement(rs.getObject(i));
    }
rows.addElement(newRow);
myTable=new DefaultTableModel(rows,columnNames);
}
rs.close();
stmt.close();
conn.close();

table=new JTable(myTable);
JScrollPane scr = new JScrollPane(table);
frame.add(scr,BorderLayout.CENTER);
frame.setSize(400,200);
frame.setVisible(true);
}
}我自己用addRow的就不行:import java.awt.BorderLayout;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.ResultSetMetaData;import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;
import java.util.Vector;public class Test1 {
public static final String DBDRIVER = "com.mysql.jdbc.Driver";
public static final String DBURL = "jdbc:mysql://localhost:3306/jxtmtest";
public static final String DBUSER = "root";
public static final String DBPASS = "123456";
public static void main(String args[]) throws Exception{
JFrame frame = new JFrame("Jtable测试");
Connection conn =  null;
JTable table;
DefaultTableModel myTable=new DefaultTableModel();
Class.forName(DBDRIVER);
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
      Statement stmt=conn.createStatement();
      ResultSet rs=stmt.executeQuery("select * from jtabletest");
      ResultSetMetaData metaData = rs.getMetaData();
      int number=metaData.getColumnCount();//表的总列数
      Vector<Object> columnNames=new Vector<Object>();
     
for(int num=0;num<number;num++){
columnNames.addElement(metaData.getColumnName(num+1));
}
myTable.addRow(columnNames); while(rs.next()){
Vector<Object> newRow = new Vector<Object>();
for (int i = 1; i <= number; i++) {
newRow.addElement(rs.getObject(i));
    }
myTable.addRow(newRow);
}
rs.close();
stmt.close();
conn.close();

table=new JTable(myTable);
JScrollPane scr = new JScrollPane(table);
frame.add(scr,BorderLayout.CENTER);
frame.setSize(400,200);
frame.setVisible(true);
}
}这是哪里的问题?

解决方案 »

  1.   

    错误有两点,第一,没有添加列名,
    第二,对JScrollPane的用法错误。
    我从拼西凑凑出来一个例子,和楼主要求是一样的,只不过值不一样,将就看吧。public Test4(){
         JFrame f=new JFrame();
        DefaultTableModel myTable=new DefaultTableModel();
        JTable table=new JTable(myTable);
        table.setPreferredScrollableViewportSize(new Dimension(550,30));
        myTable.addColumn("姓名");
        myTable.addColumn("MM");
        myTable.addColumn("NN");
        int number=3;
        int k=0;
        while(k++!=4){
            Vector<Object> newRow = new Vector<Object>();
            for (int i = 1; i <= number; i++) {
                newRow.add(i);
            }
           
            myTable.addRow(newRow);
        }
        
        table.setPreferredScrollableViewportSize(new Dimension(550,30));
        JScrollPane scrollPane=new JScrollPane(table);
        f.getContentPane().add(scrollPane,BorderLayout.CENTER);
        f.setTitle("Simple Table");
        f.pack();
        f.show();
        f.addWindowListener(new WindowAdapter() {
                            public void windowClosing(WindowEvent e) {
                              System.exit(0);
                            }
                          });
       }
       public static void main(String[] args){
         Test4 b=new Test4();
       }
      }
      

  2.   

     myTable.addRow(columnNames);列名?这个就是吧?
      

  3.   

    那是行
    这是列
    myTable.addColumn("姓名");
        myTable.addColumn("MM");
        myTable.addColumn("NN");
    不添加列只添加行不会添加进入值的,这个我测试过。
    至于不显示那就是JScrollPane的用法,借鉴我发的那个例子吧。
      

  4.   


    import java.awt.BorderLayout;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.sql.ResultSetMetaData;import javax.swing.JFrame;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.JScrollPane;
    import java.util.Vector;public class XiTi18_3 {
    public static final String DBDRIVER = "com.mysql.jdbc.Driver";
    public static final String DBURL = "jdbc:mysql://localhost:3306/jxtmtest";
    public static final String DBUSER = "root";
    public static final String DBPASS = "123456";
    public static void main(String args[]) throws Exception{
    JFrame frame = new JFrame("Jtable测试");
    Connection conn =  null;
    JTable table;
    DefaultTableModel myTable=new DefaultTableModel();
    Class.forName(DBDRIVER);
    conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
          Statement stmt=conn.createStatement();
          ResultSet rs=stmt.executeQuery("select * from jtabletest");
          ResultSetMetaData metaData = rs.getMetaData();
          int number=metaData.getColumnCount();//表的总列数
         
    for(int num=0;num<number;num++){
    myTable.addColumn(metaData.getColumnName(num+1));
    }
    while(rs.next()){
    Vector<Object> newRow = new Vector<Object>();
    for (int i = 1; i <= number; i++) {
    newRow.addElement(rs.getObject(i));
        }
    myTable.addRow(newRow);
    }
    rs.close();
    stmt.close();
    conn.close();

    table=new JTable(myTable);
    JScrollPane scr = new JScrollPane(table);
    frame.add(scr,BorderLayout.CENTER);
    frame.setSize(400,200);
    frame.setVisible(true);
    }
    }
    明白了,是我把行列搞错了,加入列就没问题了,多谢多谢!