生活随笔
收集整理的這篇文章主要介紹了
java GUI界面之JTable详解
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
JTable是將數(shù)據(jù)以表格的形式顯示給用戶看的一種組件,它包括行和列,其中每列代表一種屬性,例如:學號,姓名,成績等等。而每行代表的是一個實體,例如一個學生。在JTable中,默認情況下列會平均分配父容器的寬度,你可以通過鼠標改變列的寬度,還可以交換列的排列順序,當然,這些都可以通過代碼進行限定和修改。一下就進入正題,介紹JTable的一些構造函數(shù),JTable有許多構造函數(shù),具體的請查看API文檔,這里只對部分構造函數(shù)和功能進行介紹:
1.JTable(Object[][]?rowData,Object[]?columnNames)?:? 構造一個?JTable?來顯示二維數(shù)組rowData?中的值,其列名稱為?columnNames。
下面是例子的源代碼:
[java]?view plaincopy
public?class?JTableTest?extends?JFrame?? {?? ?? ????public?JTableTest()?? ????{?? ????????intiComponent();?? ????}?? ?? ????? ? ?? ????private?void?intiComponent()?? ????{?? ????????? ? ?? ????????String[]?columnNames?=?? ????????{?"姓名",?"學號",?"性別",?"工期",?"學院",?"學校"?};?? ?? ????????? ? ?? ????????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]?=?"計算機技術學院";?? ????????????????????break;?? ????????????????case?5:?? ????????????????????obj[i][j]?=?"北京理工大學";?? ????????????????????break;?? ????????????????}?? ????????????}?? ????????}?? ?????????? ?????????? ????????? ? ?? ????????JTable?table?=?new?JTable(obj,?columnNames);?? ????????? ? ?? ????????TableColumn?column?=?null;?? ????????int?colunms?=?table.getColumnCount();?? ????????for(int?i?=?0;?i?<?colunms;?i++)?? ????????{?? ????????????column?=?table.getColumnModel().getColumn(i);?? ?????????????? ????????????column.setPreferredWidth(100);?? ????????}?? ????????? ? ?? ????????table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);?? ?????????? ?????????? ????????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();?? ????}?? }??
界面如下:
以上這種構造方法,看起來沒有用到TableModel,其實是系統(tǒng)幫我們自動生成了一個DefaultModel的實例,DefaultModel是TableModel的子類。每個JTabel都會有一個TableModel,這個TabelModel管理表格的數(shù)據(jù),下面就來介紹定義自己的TableModel來實現(xiàn)自己的JTable.
2.?JTable(TableModel?dm)?:?構造一個JTable,使用數(shù)據(jù)模型dm、默認的列模型和默認的選擇模型對其進行初始化。
下面是例子的源代碼:
[java]?view plaincopy
public?class?JTableTest?extends?JFrame?? {?? ?? ????public?JTableTest()?? ????{?? ????????intiComponent();?? ????}?? ?? ????? ? ?? ????private?void?intiComponent()?? ????{?? ????????JTable?table?=?new?JTable(new?MyTableModel());?? ?? ?????????? ????????JScrollPane?scroll?=?new?JScrollPane(table);?? ????????add(scroll);?? ????????this.setVisible(true);?? ????????this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);?? ????????this.pack();?? ????}?? ?? ????private?class?MyTableModel?extends?AbstractTableModel?? ????{?? ????????? ? ?? ????????String[]?columnNames?=?? ????????{?"姓名",?"學號",?"年齡",?"成績",?"選擇"?};?? ????????Object[][]?data?=?new?Object[2][5];?? ?? ????????? ? ?? ????????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;?? ????????????????????????}?? ????????????????????}?? ????????????????}?? ????????????}?? ????????}?? ?? ?????????? ????????? ? ?? ????????@Override?? ????????public?String?getColumnName(int?column)?? ????????{?? ????????????return?columnNames[column];?? ????????}?? ?????????? ????????? ? ?? ????????@Override?? ????????public?int?getColumnCount()?? ????????{?? ????????????return?columnNames.length;?? ????????}?? ?? ????????? ? ?? ????????@Override?? ????????public?int?getRowCount()?? ????????{?? ????????????return?data.length;?? ????????}?? ?? ????????? ? ?? ????????@Override?? ????????public?Object?getValueAt(int?rowIndex,?int?columnIndex)?? ????????{?? ????????????return?data[rowIndex][columnIndex];?? ????????}?? ?? ????????? ? ?? ????????@Override?? ????????public?Class<?>?getColumnClass(int?columnIndex)?? ????????{?? ????????????return?data[0][columnIndex].getClass();?? ????????}?? ?? ????????? ? ?? ????????@Override?? ????????public?boolean?isCellEditable(int?rowIndex,?int?columnIndex)?? ????????{?? ????????????if?(columnIndex?<?2)?? ????????????????return?false;?? ????????????else?? ????????????????return?true;?? ????????}?? ?????????? ????????? ? ?? ????????@Override?? ????????public?void?setValueAt(Object?aValue,?int?rowIndex,?int?columnIndex)?? ????????{?? ????????????data[rowIndex][columnIndex]?=?aValue;?? ?????????????? ????????????fireTableCellUpdated(rowIndex,?columnIndex);?? ????????}?? ?? ????}?? ?? ????public?static?void?main(String[]?args)?? ????{?? ????????new?JTableTest();?? ????}?? }??
下面是程序界面:
這里要指出的是每個數(shù)據(jù)單元的都有個cell renderer根據(jù)其數(shù)據(jù)類型將數(shù)據(jù)進行繪畫顯示出來。默認情況下boolean類型對應的是CheckBox對象,Object類型是將對象的字符顯示出來,ImageIcon是將圖片以lable形式顯示出來等等.具體的可以查看API文檔.
總結
以上是生活随笔為你收集整理的java GUI界面之JTable详解的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。