首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于DefaultTableModel的addRow的有关问题

2013-10-17 
关于DefaultTableModel的addRow的问题刚看了DefaultTableModel,自己练习下,参考网上的方法可以读出数据到t

关于DefaultTableModel的addRow的问题
刚看了DefaultTableModel,自己练习下,参考网上的方法可以读出数据到table里,我自己用addRow的怎么会显示不出来数据,也没提示错误,有点晕了,拜托各位给看看:
数据表的机构如下:
DROP TABLE IF EXISTS jtabletest;
   CREATE TABLE jtabletest
(
idINTAUTO_INCREMENTPRIMARY KEY,
nameVARCHAR(30)NOT NULL,
ageINT,
birthdayDATE,
schoolVARCHAR(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);
}
}


这是哪里的问题?
[解决办法]
错误有两点,第一,没有添加列名,
第二,对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();
   }
  }

热点排行