日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

感受JTable 与 JTableModel

發(fā)布時間:2024/4/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 感受JTable 与 JTableModel 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

??????????一期的畢業(yè)設(shè)計中用到了JTable控件,具體而言,是將數(shù)據(jù)庫中的內(nèi)容顯示到JTable上,再將這個JTable控件加到一個JScrollPane(能滾動的面板)上?,因為小組成員都要用到,所以我寫了一個公用的類,只要把列名(是一個String數(shù)組)以及一個SQL的查詢語句當(dāng)作參數(shù),調(diào)用這個類的jianbiao方法就能返回一個JPanel,另外還提供了返回JTable對象與DefaultTableModel對象的方法。頗為簡單,下面就是這個類。

package chongyong;

import javax.swing.JTable;
import javax.swing.JScrollPane;
import java.awt.GridLayout;
import java.sql.ResultSet;
import java.awt.Cursor;
import java.sql.SQLException;
import javax.swing.JPanel;
import javax.swing.table.DefaultTableModel;
import java.util.Vector;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.BorderLayout;

/**
?* <p>Title: </p>
?*
?* <p>只要傳入一個字符數(shù)組、一個SQL字符串就會返回以這字符串?dāng)?shù)組為列名以SQL字符串為內(nèi)容的表格 </p>
?*
?* <p>Copyright: Copyright (c) 2006</p>
?*
?* <p>Company: </p>
?*
?* @author not attributable
?* @version 1.0
?*/
public class autojianbiao extends JPanel {
??? JTable table;
??? DefaultTableModel tableModel;

??? //為了方面于大家給表格加一些屬性,所以用此方法返回本類生成的JTable對象
??? public JTable return_table() {
??????? return table;
??? }
public DefaultTableModel return_table_model(){
return tableModel;
}

??? //本類的構(gòu)造方法
??? public autojianbiao() {
??????? super();
??? }


??? public JPanel jianbiao(String[] columnNames, String sqlStr) {
??????? //表格列向量;
??????? Vector cell;

//表格行向量;
??????? Vector row = new Vector();

//聲明表格模型;
??????? tableModel = new DefaultTableModel();

//將表格頭轉(zhuǎn)換過向量類型,以備表格模型使用;
??????? Vector tableHeadName = new Vector();

??????? for (int i = 0; i < columnNames.length; i++) {
??????????? tableHeadName.add(columnNames[i]);
??????? }

//初始化表格數(shù)據(jù),這些數(shù)據(jù)實例運行來源于數(shù)據(jù)庫中;
??????? db db1 = new db();
??????? ResultSet rs = db1.select(sqlStr);

??????? try {

??????????? while (rs.next()) {

??????????????? cell = new Vector();
??????????????? for (int i = 1; i <= columnNames.length; i++) {
??????????????????? cell.add(rs.getString(i));

??????????????? }
??????????????? row.add(cell);
??????????? }
??????? } catch (SQLException ex) {
??????? }

//設(shè)置表格模型;
??????? tableModel.setDataVector(row, tableHeadName);

//表格使用模型;
??????? table = new JTable(tableModel);
//table.setRowHeight(20);

//new Cursor(1)設(shè)置鼠標(biāo)指針樣式,12為手形;
??????? table.setCursor(new Cursor(12));

//把表格加在scrollPane組件上;
??????? JScrollPane scrollPane = new JScrollPane();
??????? scrollPane.getViewport().add(table);

//設(shè)置光標(biāo)為手形;
??????? scrollPane.setCursor(new Cursor(12));

//定義面板;
??????? JPanel pan = new JPanel();
??????? pan.setLayout(new BorderLayout());
??????? pan.add(scrollPane);

//設(shè)置窗體

??????? pan.setSize(737, 160);
//把這個JPanel返回,以方便大家調(diào)用
??????? return pan;
??? }

}

?

后來的使用過程中,我總結(jié)出很多問題,拿出來和大家分享:
一、我要實現(xiàn)單擊這個表格的一行,點擊刪除按鈕,就把這行刪除。
?????? 大家應(yīng)該知道,要刪除這行,首先得取獲得點擊的這行的行號,剛開始我用的inti=
tableModel.getSelectedRow(),i 就是這個行號,但是發(fā)現(xiàn)刪除時并不能刪除選擇的行,解決方法:int i=table.getSelectedRow(),用table獲取行號就是當(dāng)前選中的行號,感覺是tableModel中還存一個副本,并不是
最新的表格樣式。

二、要實現(xiàn)根據(jù)查詢內(nèi)容,變換Jtable中的內(nèi)容
?????? 剛開始的實現(xiàn)方法是利用查詢語句,重新調(diào)用一次上面創(chuàng)建表格的類,把這個表格添加到滾動面板上,出現(xiàn)
的問題:當(dāng)滾動條移動時,表格不顯示查詢出來的內(nèi)容,而是重新顯示建JFrame時初始內(nèi)容。解決方式:不能
重新New 表格,應(yīng)該是把表格作為參數(shù)傳過來后,重新寫一篇根據(jù)RS的內(nèi)容構(gòu)造表格內(nèi)容的程序,改變當(dāng)前表格的內(nèi)容。
????? 所以在涉及到表格的操作里,當(dāng)要根據(jù)增、刪、改、查改變表格內(nèi)容的時候,不要重新New表格,要改變
JtableModel,它提供了addRow()和removeRow方法,很好用。

總結(jié)

以上是生活随笔為你收集整理的感受JTable 与 JTableModel的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。