作者callmeleo (Leo)
看板java
标题[问题] JTable抓资料库资料...
时间Sat Sep 3 01:42:32 2011
大家好,小弟目前在实作从资料库中抓资料丢进JTable中,
从表单抓资料已经可运作,请问如果想在另一个class的方法内画出JTable,
而且这个JTable要能抓到conSQL这个class中的columnName与recordSet,请问该如何实作
?
小弟用过DefaultTableModel..都抓不到资料..麻烦各位大大指点小弟一下 谢谢~
补充一下我现在的做法 我另一个class是继承conSQL这个class,但是在使用columnName时
,是空值...是小弟的想法哪边歪了吗? 谢谢~~
补充一下JTable部分和主程式部分
class A {
public static voide main(String[] args){
conSQL cns = new conSQL();
cns.run("select * from employees");
member_dialog td = new member_dialog(); //产生对话视窗
td.layout();
}
}
class conSQL {
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
String url = "jdbc:odbc:JDBC";
int columnCount;
String[] columnName;
String[] record;
Connection con;
Statement stmt;
ResultSet rs;
ResultSetMetaData rsmd;
@SuppressWarnings("rawtypes")
Vector recordSet;
@SuppressWarnings("rawtypes")
public conSQL() { // 建构函式
recordSet = new Vector();
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public void run(String sqlString) {
recordSet = new Vector();
try {
Class.forName(driver);// 载入JDBC Driver
con = DriverManager.getConnection(url);// 与资料来源建立连结
stmt = con.createStatement(); // 建立Statement物件
rs = stmt.executeQuery(sqlString); // 执行SQL指令以ResultSet物件储存
rsmd = rs.getMetaData(); // 回传ResultSet栏位的数目、型态、属性
columnCount = rsmd.getColumnCount(); // 回传ResultSet栏位的数目
columnName = new String[columnCount];
for (int i = 1; i <= columnCount; i++) {
columnName[i-1] = rsmd.getColumnName(i);// 取得ResultSet栏位的名称
System.out.println(columnName[i-1]);
}
while (rs.next()) {
record = new String[columnCount];
for (int i = 1; i <= columnCount; i++) {
record[i-1] = rs.getString(i);
System.out.println(record[i-1]);
}
recordSet.addElement(record); //全部资料
}
//fireTableChanged(null);
if (stmt != null) {
stmt.close();
}
if (con != null) {
con.close();
}
}
catch (Exception e) {
recordSet = new Vector();
e.printStackTrace();
}
}
public String getColumnName(int i) {
return columnName[i];
}
public int getColumnCount() {
return columnCount;
}
public int getRowCount() {
return recordSet.size();
}
public Object getValueAt(int row, int col) {
return ((String[]) recordSet.elementAt(row))[col];
}
}
====================================================================
class member_dialog extends conSQL{
JFrame frame;
JScrollPane scroller_1;
DefaultTableModel model;
JTable table;
public member_dialog(){
frame = new JFrame();
scroller_1 = new JScrollPane();
model = new DefaultTableModel();
}
public void layout(){
Container pane = frame.getContentPane();
GridBagLayout grid = new GridBagLayout();
GridBagConstraints gc = new GridBagConstraints();
pane.setLayout(grid);
try{
for (int i = 1; i <= columnCount; i++) {
model.addColumn(columnName[i-1]);
}
while (rs.next()) {
for (int i = 1; i <= columnCount; i++) {
record[i-1] = rs.getString(i);
}
recordSet.addElement(record); //全部资料
model.addRow(recordSet);
}
}
catch(Exception e){
e.printStackTrace();
}
table = new JTable(model);
table.setShowGrid(true); // 是否显示表格的格线
table.setShowHorizontalLines(true); // 是否显示表格的水平格线
table.setShowVerticalLines(true); // 是否显示表格的垂直格线
table.setRowSelectionAllowed(true); // 是否允许选择横列
table.setColumnSelectionAllowed(true); // 是否允许选择直行
table.getTableHeader().setReorderingAllowed(true);// 是否允许移动直行
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);// 设定多重选
择模式为单选
gc.gridx = 0; //公司成员表格
gc.gridy = 1;
gc.gridwidth = 2;
gc.gridheight = 2;
table.setPreferredScrollableViewportSize(new Dimension(400, 200));
scroller_1.setViewportView(table);
pane.add(scroller_1,gc);
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.171.127.97
1F:→ darkk6:所以你的问题是 columnNames null 还是 JTable 没东西 ?? 09/03 02:29
2F:→ callmeleo:JTable显示不出东西 columnName和recordSet皆有抓到资料 09/03 02:54
3F:→ darkk6:那应该给一下 JTable 放资料的部分 09/03 10:13
※ 编辑: callmeleo 来自: 122.121.202.186 (09/03 15:50)