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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java GUI界面之JTable详解

發(fā)布時間:2025/6/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java GUI界面之JTable详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

JTable是將數(shù)據(jù)以表格的形式顯示給用戶看的一種組件,它包括行和列,其中每列代表一種屬性,例如:學(xué)號,姓名,成績等等。而每行代表的是一個實體,例如一個學(xué)生。在JTable中,默認(rèn)情況下列會平均分配父容器的寬度,你可以通過鼠標(biāo)改變列的寬度,還可以交換列的排列順序,當(dāng)然,這些都可以通過代碼進(jìn)行限定和修改。一下就進(jìn)入正題,介紹JTable的一些構(gòu)造函數(shù),JTable有許多構(gòu)造函數(shù),具體的請查看API文檔,這里只對部分構(gòu)造函數(shù)和功能進(jìn)行介紹:

1.JTable(Object[][]?rowData,Object[]?columnNames)?:? 構(gòu)造一個?JTable?來顯示二維數(shù)組rowData?中的值,其列名稱為?columnNames。

下面是例子的源代碼:

[java]?view plaincopy
  • public?class?JTableTest?extends?JFrame??
  • {??
  • ??
  • ????public?JTableTest()??
  • ????{??
  • ????????intiComponent();??
  • ????}??
  • ??
  • ????/**?
  • ?????*?初始化窗體組件?
  • ?????*/??
  • ????private?void?intiComponent()??
  • ????{??
  • ????????/*?
  • ?????????*?設(shè)置JTable的列名?
  • ?????????*/??
  • ????????String[]?columnNames?=??
  • ????????{?"姓名",?"學(xué)號",?"性別",?"工期",?"學(xué)院",?"學(xué)校"?};??
  • ??
  • ????????/*?
  • ?????????*?初始化JTable里面各項的值,設(shè)置兩個一模一樣的實體"趙匡義"學(xué)生。?
  • ?????????*/??
  • ????????Object[][]?obj?=?new?Object[2][6];??
  • ????????for?(int?i?=?0;?i?<?2;?i++)??
  • ????????{??
  • ????????????for?(int?j?=?0;?j?<?6;?j++)??
  • ????????????{??
  • ????????????????switch?(j)??
  • ????????????????{??
  • ????????????????case?0:??
  • ????????????????????obj[i][j]?=?"趙匡義";??
  • ????????????????????break;??
  • ????????????????case?1:??
  • ????????????????????obj[i][j]?=?"123215";??
  • ????????????????????break;??
  • ????????????????case?2:??
  • ????????????????????obj[i][j]?=?"男";??
  • ????????????????????break;??
  • ????????????????case?3:??
  • ????????????????????obj[i][j]?=?"兩年";??
  • ????????????????????break;??
  • ????????????????case?4:??
  • ????????????????????obj[i][j]?=?"計算機(jī)技術(shù)學(xué)院";??
  • ????????????????????break;??
  • ????????????????case?5:??
  • ????????????????????obj[i][j]?=?"北京理工大學(xué)";??
  • ????????????????????break;??
  • ????????????????}??
  • ????????????}??
  • ????????}??
  • ??????????
  • ??????????
  • ????????/*?
  • ?????????*?JTable的其中一種構(gòu)造方法?
  • ?????????*/??
  • ????????JTable?table?=?new?JTable(obj,?columnNames);??
  • ????????/*?
  • ?????????*?設(shè)置JTable的列默認(rèn)的寬度和高度?
  • ?????????*/??
  • ????????TableColumn?column?=?null;??
  • ????????int?colunms?=?table.getColumnCount();??
  • ????????for(int?i?=?0;?i?<?colunms;?i++)??
  • ????????{??
  • ????????????column?=?table.getColumnModel().getColumn(i);??
  • ????????????/*將每一列的默認(rèn)寬度設(shè)置為100*/??
  • ????????????column.setPreferredWidth(100);??
  • ????????}??
  • ????????/*?
  • ?????????*?設(shè)置JTable自動調(diào)整列表的狀態(tài),此處設(shè)置為關(guān)閉?
  • ?????????*/??
  • ????????table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);??
  • ??????????
  • ????????/*用JScrollPane裝載JTable,這樣超出范圍的列就可以通過滾動條來查看*/??
  • ????????JScrollPane?scroll?=?new?JScrollPane(table);??
  • ????????scroll.setSize(300,?200);??
  • ??????????
  • ??????????
  • ????????add(scroll);??
  • ????????this.setVisible(true);??
  • ????????this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);??
  • ????????this.pack();??
  • ????}??
  • ??
  • ????public?static?void?main(String[]?args)??
  • ????{??
  • ????????new?JTableTest();??
  • ????}??
  • }??
  • 界面如下:
















    以上這種構(gòu)造方法,看起來沒有用到TableModel,其實是系統(tǒng)幫我們自動生成了一個DefaultModel的實例,DefaultModel是TableModel的子類。每個JTabel都會有一個TableModel,這個TabelModel管理表格的數(shù)據(jù),下面就來介紹定義自己的TableModel來實現(xiàn)自己的JTable.


    2.?JTable(TableModel?dm)?:?構(gòu)造一個JTable,使用數(shù)據(jù)模型dm、默認(rèn)的列模型和默認(rèn)的選擇模型對其進(jìn)行初始化。

    下面是例子的源代碼:

    [java]?view plaincopy
  • public?class?JTableTest?extends?JFrame??
  • {??
  • ??
  • ????public?JTableTest()??
  • ????{??
  • ????????intiComponent();??
  • ????}??
  • ??
  • ????/**?
  • ?????*?初始化窗體組件?
  • ?????*/??
  • ????private?void?intiComponent()??
  • ????{??
  • ????????JTable?table?=?new?JTable(new?MyTableModel());??
  • ??
  • ????????/*?用JScrollPane裝載JTable,這樣超出范圍的列就可以通過滾動條來查看?*/??
  • ????????JScrollPane?scroll?=?new?JScrollPane(table);??
  • ????????add(scroll);??
  • ????????this.setVisible(true);??
  • ????????this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);??
  • ????????this.pack();??
  • ????}??
  • ??
  • ????private?class?MyTableModel?extends?AbstractTableModel??
  • ????{??
  • ????????/*?
  • ?????????*?這里和剛才一樣,定義列名和每個數(shù)據(jù)的值?
  • ?????????*/??
  • ????????String[]?columnNames?=??
  • ????????{?"姓名",?"學(xué)號",?"年齡",?"成績",?"選擇"?};??
  • ????????Object[][]?data?=?new?Object[2][5];??
  • ??
  • ????????/**?
  • ?????????*?構(gòu)造方法,初始化二維數(shù)組data對應(yīng)的數(shù)據(jù)?
  • ?????????*/??
  • ????????public?MyTableModel()??
  • ????????{??
  • ????????????for?(int?i?=?0;?i?<?2;?i++)??
  • ????????????{??
  • ????????????????for?(int?j?=?0;?j?<?5;?j++)??
  • ????????????????{??
  • ????????????????????if?(0?==?i)??
  • ????????????????????{??
  • ????????????????????????switch?(j)??
  • ????????????????????????{??
  • ????????????????????????case?0:??
  • ????????????????????????????data[i][j]?=?"鄧光僑";??
  • ????????????????????????????break;??
  • ????????????????????????case?1:??
  • ????????????????????????????data[i][j]?=?"2008415";??
  • ????????????????????????????break;??
  • ????????????????????????case?2:??
  • ????????????????????????????data[i][j]?=?"18";??
  • ????????????????????????????break;??
  • ????????????????????????case?3:??
  • ????????????????????????????data[i][j]?=?"90";??
  • ????????????????????????????break;??
  • ????????????????????????case?4:??
  • ????????????????????????????data[i][j]?=?new?Boolean(false);??
  • ????????????????????????????break;??
  • ????????????????????????}??
  • ????????????????????}??
  • ????????????????????if?(1?==?i)??
  • ????????????????????{??
  • ????????????????????????switch?(j)??
  • ????????????????????????{??
  • ????????????????????????case?0:??
  • ????????????????????????????data[i][j]?=?"李潔璇";??
  • ????????????????????????????break;??
  • ????????????????????????case?1:??
  • ????????????????????????????data[i][j]?=?"2008321";??
  • ????????????????????????????break;??
  • ????????????????????????case?2:??
  • ????????????????????????????data[i][j]?=?"18";??
  • ????????????????????????????break;??
  • ????????????????????????case?3:??
  • ????????????????????????????data[i][j]?=?"63";??
  • ????????????????????????????break;??
  • ????????????????????????case?4:??
  • ????????????????????????????data[i][j]?=?new?Boolean(false);??
  • ????????????????????????????break;??
  • ????????????????????????}??
  • ????????????????????}??
  • ????????????????}??
  • ????????????}??
  • ????????}??
  • ??
  • ????????//?以下為繼承自AbstractTableModle的方法,可以自定義??
  • ????????/**?
  • ?????????*?得到列名?
  • ?????????*/??
  • ????????@Override??
  • ????????public?String?getColumnName(int?column)??
  • ????????{??
  • ????????????return?columnNames[column];??
  • ????????}??
  • ??????????
  • ????????/**?
  • ?????????*?重寫方法,得到表格列數(shù)?
  • ?????????*/??
  • ????????@Override??
  • ????????public?int?getColumnCount()??
  • ????????{??
  • ????????????return?columnNames.length;??
  • ????????}??
  • ??
  • ????????/**?
  • ?????????*?得到表格行數(shù)?
  • ?????????*/??
  • ????????@Override??
  • ????????public?int?getRowCount()??
  • ????????{??
  • ????????????return?data.length;??
  • ????????}??
  • ??
  • ????????/**?
  • ?????????*?得到數(shù)據(jù)所對應(yīng)對象?
  • ?????????*/??
  • ????????@Override??
  • ????????public?Object?getValueAt(int?rowIndex,?int?columnIndex)??
  • ????????{??
  • ????????????return?data[rowIndex][columnIndex];??
  • ????????}??
  • ??
  • ????????/**?
  • ?????????*?得到指定列的數(shù)據(jù)類型?
  • ?????????*/??
  • ????????@Override??
  • ????????public?Class<?>?getColumnClass(int?columnIndex)??
  • ????????{??
  • ????????????return?data[0][columnIndex].getClass();??
  • ????????}??
  • ??
  • ????????/**?
  • ?????????*?指定設(shè)置數(shù)據(jù)單元是否可編輯.這里設(shè)置"姓名","學(xué)號"不可編輯?
  • ?????????*/??
  • ????????@Override??
  • ????????public?boolean?isCellEditable(int?rowIndex,?int?columnIndex)??
  • ????????{??
  • ????????????if?(columnIndex?<?2)??
  • ????????????????return?false;??
  • ????????????else??
  • ????????????????return?true;??
  • ????????}??
  • ??????????
  • ????????/**?
  • ?????????*?如果數(shù)據(jù)單元為可編輯,則將編輯后的值替換原來的值?
  • ?????????*/??
  • ????????@Override??
  • ????????public?void?setValueAt(Object?aValue,?int?rowIndex,?int?columnIndex)??
  • ????????{??
  • ????????????data[rowIndex][columnIndex]?=?aValue;??
  • ????????????/*通知監(jiān)聽器數(shù)據(jù)單元數(shù)據(jù)已經(jīng)改變*/??
  • ????????????fireTableCellUpdated(rowIndex,?columnIndex);??
  • ????????}??
  • ??
  • ????}??
  • ??
  • ????public?static?void?main(String[]?args)??
  • ????{??
  • ????????new?JTableTest();??
  • ????}??
  • }??
  • 下面是程序界面:


      這里要指出的是每個數(shù)據(jù)單元的都有個cell renderer根據(jù)其數(shù)據(jù)類型將數(shù)據(jù)進(jìn)行繪畫顯示出來。默認(rèn)情況下boolean類型對應(yīng)的是CheckBox對象,Object類型是將對象的字符顯示出來,ImageIcon是將圖片以lable形式顯示出來等等.具體的可以查看API文檔.

    總結(jié)

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

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