可視化Swing中JTable控件綁定SQL數(shù)據(jù)源的兩種方法深入解析
在 MyEclipse 的可視化 Swing 中,有 JTable 控件。
JTable 用來顯示和編輯常規(guī)二維單元表。
那么,如何將 數(shù)據(jù)庫SQL中的數(shù)據(jù)綁定至JTable中呢?
在這里,提供兩種方法。
JTable的構(gòu)造方法
通過查閱Java的API,可以可以得到JTable的兩個(gè)重要的構(gòu)造方法:
JTable(Object[][] rowData, Object[] columnNames)
構(gòu)造一個(gè) JTable 來顯示二維數(shù)組 rowData 中的值,其列名稱為 columnNames。
JTable(TableModel dm)
構(gòu)造一個(gè) JTable,使用數(shù)據(jù)模型 dm、默認(rèn)的列模型和默認(rèn)的選擇模型對(duì)其進(jìn)行初始化。
以下,我們就通過這兩個(gè)構(gòu)造方法來將JTable綁定到SQL數(shù)據(jù)庫。
必要的準(zhǔn)備工作
一、有一個(gè)可供綁定的數(shù)據(jù)庫。
二、在可視化Swing中拖拉進(jìn)來一個(gè)Jtable控件。
方法一:通過二維數(shù)組綁定
該方法用到的構(gòu)造方法為:
JTable(Object[][] rowData, Object[] columnNames)
構(gòu)造一個(gè) JTable 來顯示二維數(shù)組 rowData 中的值,其列名稱為 columnNames。
構(gòu)建二維數(shù)組rowData
通過上節(jié)博文“預(yù)編譯”的學(xué)習(xí),我們已經(jīng)能夠?qū)QL數(shù)據(jù)庫讀取至ResultSet 中。
《JDBC之PreparedStatement類中預(yù)編譯的綜合應(yīng)用解析》
回顧如下:
/** 查詢并返回記錄集 */
public ResultSet getResultSet(String sql, Object[] objArr){
getConnection();
try {
pStatement = connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
if(objArr!=null && objArr.length>0) {
for (int i = 0; i < objArr.length; i++) {
pStatement.setObject(i+1, objArr[i]);
}
}
rSet = pStatement.executeQuery();
//list = resultSetToList(rs);
} catch (SQLException e) {
e.printStackTrace();
} finally {
//close();
}
return rSet;
}
【注】只是與上節(jié)博客的方法名不同而已。。
現(xiàn)在,我們?yōu)榱藢esultSet 轉(zhuǎn)化為二維數(shù)組,寫如下方法:
/** 把結(jié)果集轉(zhuǎn)成Object[][] */
public Object[][] resultSetToObjectArray(ResultSet rs) {
Object[][] data = null;
try {
rs.last();
int rows = rs.getRow();
data = new Object[rows][];
ResultSetMetaData md = rs.getMetaData();//獲取記錄集的元數(shù)據(jù)
int columnCount = md.getColumnCount();//列數(shù)
rs.first();
int k = 0;
while(rs.next()) {
System.out.println("i"+k);
Object[] row = new Object[columnCount];
for(int i=0; i<columnCount; i++) {
row[i] = rs.getObject(i+1).toString();
}
data[k] = row;
k++;
}
} catch (Exception e) {
}
return data;
}
并將這兩個(gè)方法存至文件UserDAO.java中。
在Swing所在的Java文件中先實(shí)例化UserDAO:
UserDAO userDAO = new UserDAO();
即可將SQL數(shù)據(jù)轉(zhuǎn)化為二維數(shù)組:
Object[][] dataObjects = userDAO.resultSetToObjectArray(userDAO.getResultSet(
"select id,username,password from t_userr", null));
構(gòu)建列名稱 columnNames
這個(gè)比較簡(jiǎn)單,只需要將列名稱寫入String數(shù)組即可。
String[] tableStrings = { "id", "username", "password" };
構(gòu)建JTable的Model:
jTable1.setModel(new DefaultTableModel(dataObjects, tableStrings));
整體代碼視圖:
整體代碼視圖:

最終JTable效果圖:
方法二:通過Model綁定該方法用到的構(gòu)造方法為:
JTable(TableModel dm)
構(gòu)造一個(gè) JTable,使用數(shù)據(jù)模型 dm、默認(rèn)的列模型和默認(rèn)的選擇模型對(duì)其進(jìn)行初始化。
進(jìn)入 JTable 控件的控制面板,點(diǎn)擊model。
選擇Model來自代碼。
填寫 model 的方法路徑:包名.Java文件名.方法名。
為了調(diào)用方便,建議將方法設(shè)置為靜態(tài)方法。
在剛剛設(shè)置的路徑下寫入Model的方法,注意其返回類型為TableModel。
方法的寫法與上面的大同小異,不再贅述。
public static TableModel Member() {
String[][] playerInfo = new String[80][8];
BaseDAO bDao = new BaseDAO();
String sql = "select id,realName,username,sex,phone,email,vocation,city from jdbctest";
String[] ss = {};
ArrayList<HashMap<Object, Object>> list = bDao.Query(sql, ss);
// bDao.AllArray(list);
int i = 0, j = 0;
for (HashMap<Object, Object> maps : list) {
Set<Object> keysObjects = maps.keySet();
for (Object kObject : keysObjects) {
playerInfo[i][j] = maps.get(kObject).toString();
j++;
}
i++;
j = 0;
}
String[] Names = { "id", "username", "sex", "phone","vocation","email","realName", "city" };
DefaultTableModel dModel = new DefaultTableModel(playerInfo, Names);
return (TableModel)dModel;
}
JTable 效果
- Java Swing中的表格(JTable)和樹(JTree)組件使用實(shí)例
- Java Swing實(shí)現(xiàn)JTable檢測(cè)單元格數(shù)據(jù)變更事件的方法示例
- Java Swing中JTable渲染器與編輯器用法示例
- Jtable和JTree的寫法示例代碼
- jtable列中自定義button示例代碼
- 解決JTable排序問題的方法詳解
- 基于JTable的列寬與內(nèi)容自適應(yīng)的實(shí)現(xiàn)方法
- Java Swing中的文本框(JTextField)與文本區(qū)(JTextArea)使用實(shí)例
- Java Swing中的下拉式菜單(menu)、彈出式菜單(JPopupMenu)、選項(xiàng)卡窗體(JTabbedPane)組件使用案例
- java swing中實(shí)現(xiàn)拖拽功能示例
- Java Swing組件編程之JTable表格用法實(shí)例詳解
相關(guān)文章
Java的鎖機(jī)制:synchronized和CAS詳解
這篇文章主要介紹了Java的鎖機(jī)制synchronized和CAS詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-09-09Java?對(duì)象在?JVM?中的內(nèi)存布局超詳細(xì)解說
這篇文章主要介紹了Java?對(duì)象在?JVM?中的內(nèi)存布局超詳細(xì)解說,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09解決idea報(bào)錯(cuò) Connot resolve column 的問題
這篇文章主要介紹了解決idea報(bào)錯(cuò) Connot resolve column 的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02Spring AOP中的JDK和CGLib動(dòng)態(tài)代理哪個(gè)效率更高?
今天小編就為大家分享一篇關(guān)于Spring AOP中的JDK和CGLib動(dòng)態(tài)代理哪個(gè)效率更高?,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03springboot快速整合Mybatis組件的方法(推薦)
Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開發(fā)過程。這篇文章主要介紹了springboot快速整合Mybatis組件的方法,需要的朋友可以參考下2019-11-11mybatis多個(gè)plugins的執(zhí)行順序解析
這篇文章主要介紹了mybatis多個(gè)plugins的執(zhí)行順序解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09Java每隔兩個(gè)數(shù)刪掉一個(gè)數(shù)問題詳解
這篇文章主要介紹了Java每隔兩個(gè)數(shù)刪掉一個(gè)數(shù)問題詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04