感受JTable 与 JTableModel
??????????一期的畢業設計中用到了JTable控件,具體而言,是將數據庫中的內容顯示到JTable上,再將這個JTable控件加到一個JScrollPane(能滾動的面板)上?,因為小組成員都要用到,所以我寫了一個公用的類,只要把列名(是一個String數組)以及一個SQL的查詢語句當作參數,調用這個類的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>只要傳入一個字符數組、一個SQL字符串就會返回以這字符串數組為列名以SQL字符串為內容的表格 </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;
}
??? //本類的構造方法
??? public autojianbiao() {
??????? super();
??? }
??? public JPanel jianbiao(String[] columnNames, String sqlStr) {
??????? //表格列向量;
??????? Vector cell;
//表格行向量;
??????? Vector row = new Vector();
//聲明表格模型;
??????? tableModel = new DefaultTableModel();
//將表格頭轉換過向量類型,以備表格模型使用;
??????? Vector tableHeadName = new Vector();
??????? for (int i = 0; i < columnNames.length; i++) {
??????????? tableHeadName.add(columnNames[i]);
??????? }
//初始化表格數據,這些數據實例運行來源于數據庫中;
??????? 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) {
??????? }
//設置表格模型;
??????? tableModel.setDataVector(row, tableHeadName);
//表格使用模型;
??????? table = new JTable(tableModel);
//table.setRowHeight(20);
//new Cursor(1)設置鼠標指針樣式,12為手形;
??????? table.setCursor(new Cursor(12));
//把表格加在scrollPane組件上;
??????? JScrollPane scrollPane = new JScrollPane();
??????? scrollPane.getViewport().add(table);
//設置光標為手形;
??????? scrollPane.setCursor(new Cursor(12));
//定義面板;
??????? JPanel pan = new JPanel();
??????? pan.setLayout(new BorderLayout());
??????? pan.add(scrollPane);
//設置窗體
??????? pan.setSize(737, 160);
//把這個JPanel返回,以方便大家調用
??????? return pan;
??? }
}
?
后來的使用過程中,我總結出很多問題,拿出來和大家分享:
一、我要實現單擊這個表格的一行,點擊刪除按鈕,就把這行刪除。
?????? 大家應該知道,要刪除這行,首先得取獲得點擊的這行的行號,剛開始我用的inti=
tableModel.getSelectedRow(),i 就是這個行號,但是發現刪除時并不能刪除選擇的行,解決方法:int i=table.getSelectedRow(),用table獲取行號就是當前選中的行號,感覺是tableModel中還存一個副本,并不是
最新的表格樣式。
二、要實現根據查詢內容,變換Jtable中的內容
?????? 剛開始的實現方法是利用查詢語句,重新調用一次上面創建表格的類,把這個表格添加到滾動面板上,出現
的問題:當滾動條移動時,表格不顯示查詢出來的內容,而是重新顯示建JFrame時初始內容。解決方式:不能
重新New 表格,應該是把表格作為參數傳過來后,重新寫一篇根據RS的內容構造表格內容的程序,改變當前表格的內容。
????? 所以在涉及到表格的操作里,當要根據增、刪、改、查改變表格內容的時候,不要重新New表格,要改變
JtableModel,它提供了addRow()和removeRow方法,很好用。
總結
以上是生活随笔為你收集整理的感受JTable 与 JTableModel的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA基础面试中的几个问题
- 下一篇: 一步步要看的