import javax.swing.*;
import javax.swing.table.*;import java.awt.BorderLayout;
import java.awt.Dimension;
import java.sql.*;
import java.util.Vector;public class JDBCtest2 extends JFrame{ JTable table = null;
JScrollPane scroller = null;
private JDBCtest2(){
Driver d = new com.microsoft.sqlserver.jdbc.SQLServerDriver();
try {
DriverManager.registerDriver(d);
} catch (SQLException e) {
e.printStackTrace();
}
launchFrame();
}
private void launchFrame(){
this.setName("jFrame");
this.setSize(300, 150);
this.setTitle("Test");
this.setVisible(true);
table = new JTable(new MyTableModel(load()));
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setPreferredScrollableViewportSize(new Dimension(550, 30));
scroller = new JScrollPane(table);
scroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); this.getContentPane().add(scroller,BorderLayout.CENTER);
}
private ResultSet load(){
ResultSet rs =null;
String sql = "select * from Country where cCountry like 'A%'";
try {
Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;" +
" DatabaseName=HR;user=sa;password=12134");
Statement stmt = con.createStatement();
rs = stmt.executeQuery(sql);
} catch (Exception e) {
e.printStackTrace();
}
return rs;
}
public static void main(String[] args) {
JDBCtest2 test = new JDBCtest2();
}
private class MyTableModel extends AbstractTableModel{
private Vector columnHeads = new Vector();
private Vector rows = new Vector();
private ResultSetMetaData rsmd =null;
private ResultSet RS =null;
private int count ;
public Class<?> getColumnClass(int columnIndex) {
return rows.elementAt(columnIndex).getClass();
} public String getColumnName(int column) {
return (String)columnHeads.elementAt(column);
} public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
} public int getColumnCount() {
return columnHeads.size();
} public int getRowCount() {
return rows.size();
} public Object getValueAt(int rowIndex, int columnIndex) {
Vector rowData = (Vector) (rows.elementAt(rowIndex));
return rowData.elementAt(columnIndex);
} public MyTableModel(ResultSet rs){
try {
this.RS = rs;
rsmd = rs.getMetaData();
count = rsmd.getColumnCount();
columnHeads = new Vector(count);
for ( int i = 1; i <= rsmd.getColumnCount(); ++i )
columnHeads.addElement( rsmd.getColumnName( i ) );
while ( rs.next() ){
Vector<String> currentRow = new Vector();
for ( int i = 1; i <= rsmd.getColumnCount(); ++i )
{
currentRow.addElement( rs.getString( i ) );
}
rows.addElement(currentRow);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}如上代码 我要显示数据到Jtable 我运行时 一开始只有Frame显示出来 没有Jtable显示
但是只有我改变一下JFrame的大小或者做其他改变JFRAME界面状态的操作 带数据的Jtable就出来了
为什么一开始运行时没显示呢?
import javax.swing.table.*;import java.awt.BorderLayout;
import java.awt.Dimension;
import java.sql.*;
import java.util.Vector;public class JDBCtest2 extends JFrame{ JTable table = null;
JScrollPane scroller = null;
private JDBCtest2(){
Driver d = new com.microsoft.sqlserver.jdbc.SQLServerDriver();
try {
DriverManager.registerDriver(d);
} catch (SQLException e) {
e.printStackTrace();
}
launchFrame();
}
private void launchFrame(){
this.setName("jFrame");
this.setSize(300, 150);
this.setTitle("Test");
this.setVisible(true);
table = new JTable(new MyTableModel(load()));
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setPreferredScrollableViewportSize(new Dimension(550, 30));
scroller = new JScrollPane(table);
scroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); this.getContentPane().add(scroller,BorderLayout.CENTER);
}
private ResultSet load(){
ResultSet rs =null;
String sql = "select * from Country where cCountry like 'A%'";
try {
Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;" +
" DatabaseName=HR;user=sa;password=12134");
Statement stmt = con.createStatement();
rs = stmt.executeQuery(sql);
} catch (Exception e) {
e.printStackTrace();
}
return rs;
}
public static void main(String[] args) {
JDBCtest2 test = new JDBCtest2();
}
private class MyTableModel extends AbstractTableModel{
private Vector columnHeads = new Vector();
private Vector rows = new Vector();
private ResultSetMetaData rsmd =null;
private ResultSet RS =null;
private int count ;
public Class<?> getColumnClass(int columnIndex) {
return rows.elementAt(columnIndex).getClass();
} public String getColumnName(int column) {
return (String)columnHeads.elementAt(column);
} public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
} public int getColumnCount() {
return columnHeads.size();
} public int getRowCount() {
return rows.size();
} public Object getValueAt(int rowIndex, int columnIndex) {
Vector rowData = (Vector) (rows.elementAt(rowIndex));
return rowData.elementAt(columnIndex);
} public MyTableModel(ResultSet rs){
try {
this.RS = rs;
rsmd = rs.getMetaData();
count = rsmd.getColumnCount();
columnHeads = new Vector(count);
for ( int i = 1; i <= rsmd.getColumnCount(); ++i )
columnHeads.addElement( rsmd.getColumnName( i ) );
while ( rs.next() ){
Vector<String> currentRow = new Vector();
for ( int i = 1; i <= rsmd.getColumnCount(); ++i )
{
currentRow.addElement( rs.getString( i ) );
}
rows.addElement(currentRow);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}如上代码 我要显示数据到Jtable 我运行时 一开始只有Frame显示出来 没有Jtable显示
但是只有我改变一下JFrame的大小或者做其他改变JFRAME界面状态的操作 带数据的Jtable就出来了
为什么一开始运行时没显示呢?
this.setVisible(true);table = new JTable(new MyTableModel(load()));
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setPreferredScrollableViewportSize(new Dimension(550, 30));
scroller = new JScrollPane(table);
scroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); this.getContentPane().add(scroller,BorderLayout.CENTER);
this.setVisible(true); 修改setVisible到下面的位置