感受JTable 与 JTableModel
??????????一期的畢業(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA基础面试中的几个问题
- 下一篇: 一步步要看的