使用JTable創(chuàng)建Java表的方法?這個問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!
創(chuàng)新互聯(lián)公司是一家專業(yè)提供和碩企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計、成都做網(wǎng)站、H5頁面制作、小程序制作等業(yè)務(wù)。10年已為和碩眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進行中。
Java 提供了一個名為JTable的有用類,使您可以在使用Java的Swing API組件開發(fā)圖形用戶界面時創(chuàng)建表。您可以讓用戶編輯數(shù)據(jù)或只查看數(shù)據(jù)。請注意,該表實際上并不包含數(shù)據(jù) - 它完全是一種顯示機制。
注意: 與任何Swing GUI一樣,您需要創(chuàng)建一個容器來顯示 JTable 。
使用數(shù)組存儲表數(shù)據(jù)
為JTable類提供數(shù)據(jù)的一種簡單方法是使用兩個數(shù)組。第一個將列名保存在String數(shù)組中:
String[] columnNames = {"First Name", "Surname", "Country" , "Event", "Place", "Time", "World Record" };
第二個數(shù)組是一個二維對象數(shù)組,用于保存表的數(shù)據(jù)。例如,這個陣列包括六名奧林匹克游泳運動員:
Object[][] data = { {"César Cielo", "Filho", "Brazil", "50m freestyle",1 , "21.30", false }, {"Amaury", "Leveaux", "France", "50m freestyle", 2, "21.45", false }, {"Eamon", "Sullivan", "Australia", "100m freestyle", 2, "47.32", false }, {"Michael", "Phelps", "USA", "200m freestyle", 1, "1:42.96", false }, {"Ryan", "Lochte", "USA", "200m backstroke", 1, "1:53.94", true }, {"Hugues", "Duboscq", "France", "100m breaststroke", 3, "59.37", false } };
這里的關(guān)鍵是確保兩個數(shù)組具有相同的列數(shù)。
構(gòu)建JTable
一旦掌握了數(shù)據(jù),創(chuàng)建表就是一項簡單的任務(wù)。只需調(diào)用JTable 構(gòu)造函數(shù)并將其傳遞給兩個數(shù)組:
JTable table = new JTable(data, columnNames);
您可能希望添加滾動條以確保用戶可以看到所有數(shù)據(jù)。為此,請將其JTable放入JScrollPane:
JScrollPane tableScrollPane = new JScrollPane(table);
現(xiàn)在,當(dāng)顯示表格時,您將看到數(shù)據(jù)的列和行,并且可以向上和向下滾動。
JTable對象提供了一個交互式表。如果雙擊任何單元格,您將能夠編輯內(nèi)容 - 盡管任何編輯僅影響GUI,而不影響基礎(chǔ)數(shù)據(jù)。(需要實現(xiàn)事件監(jiān)聽器來處理數(shù)據(jù)的更改。)。
要更改列的寬度,請將鼠標(biāo)懸停在列標(biāo)題的邊緣上,然后前后拖動它。要更改列的順序,請單擊并按住列標(biāo)題,然后將其拖動到新位置。
對列進行排序
要添加對行進行排序的功能,請調(diào)用setAutoCreateRowSorter方法:
table.setAutoCreateRowSorter(true);
當(dāng)此方法設(shè)置為true時,您可以單擊列標(biāo)題以根據(jù)該列下單元格的內(nèi)容對行進行排序。
改變表的外觀
要控制網(wǎng)格線的可見性,請使用以下setShowGrid方法:
table.setShowGrid(true);
要完全更改表的顏色,請使用setBackground和setGridColor方法:
table.setGridColor(Color.YELLOW); table.setBackground(Color.CYAN);
默認情況下,表的列寬相等。如果表所在的容器具有可調(diào)整大小,則列的寬度將擴大和縮小,容器會變大或變小。如果用戶調(diào)整列的大小,則右側(cè)列的寬度將更改以適應(yīng)新的列大小。
可以使用setPreferredWidth方法或列設(shè)置初始列寬。使用TableColumn類首先獲取對列的引用,然后使用setPreferredWidth方法設(shè)置大?。?/p>
TableColumn eventColumn = table.getColumnModel().getColumn(3); eventColumn.setPreferredWidth(150); TableColumn placeColumn = table.getColumnModel().getColumn(4); placeColumn.setPreferredWidth(5);
選擇行
默認情況下,用戶可以通過以下三種方式之一選擇表的行:
要選擇單行,請單擊該行中的表格單元格。
要選擇連續(xù)的多行,請將鼠標(biāo)拖到多行上,或者單擊按下了移位單元格的表格單元格。
要選擇非連續(xù)的多行,請在按住控制鍵(Mac的命令鍵)的同時單擊表格單元格。
使用表模型
如果你想要一個可以編輯的簡單的基于字符串的表,那么使用幾個數(shù)組作為表的數(shù)據(jù)會很有用。如果查看我們創(chuàng)建的數(shù)據(jù)數(shù)組,它包含的其他數(shù)據(jù)類型Strings- Place列包含ints且World Record列包含booleans。然而,這兩列都顯示為字符串。要更改此行為,請創(chuàng)建表模型。
表模型管理要在表中顯示的數(shù)據(jù)。要實現(xiàn)表模型,可以創(chuàng)建一個擴展AbstractTableModel該類的類:
public abstract class AbstractTableModel extends Object implements TableModel, Serializable{ public int getRowCount(); public int getColumnCount(); public Object getValueAt(int row, int column); public String getColumnName(int column; public boolean isCellEditable(int rowIndex, int columnIndex); public Class getColumnClass(int columnIndex); }
上面的六種方法是本分步指南中使用的方法,但是AbstractTableModel該類定義的更多方法可用于操作JTable對象中的數(shù)據(jù)。當(dāng)擴展一個類來使用AbstractTableModel, ,你只需要在實施getRowCount,getColumnCount和getValueAt方法。
創(chuàng)建一個實現(xiàn)上述五種方法的新類:
class ExampleTableModel extends AbstractTableModel{ String[] columnNames = {"First Name", "Surname", "Country" , "Event", "Place", "Time", "World Record" }; Object[][] data = { {"César Cielo", "Filho", "Brazil", "50m freestyle",1 , "21.30", false }, {"Amaury", "Leveaux", "France", "50m freestyle", 2, "21.45", false }, {"Eamon", "Sullivan", "Australia", "100m freestyle", 2, "47.32", false }, {"Michael", "Phelps", "USA", "200m freestyle", 1, "1:42.96", false }, {"Larsen", "Jensen", "USA", "400m freestyle", 3, "3:42.78", false }, }; @Override public int getRowCount() { return data.length; } @Override public int getColumnCount() { return columnNames.length; } @Override public Object getValueAt(int row, int column) { return data[row][column]; } @Override public String getColumnName(int column) { return columnNames[column]; }@Override public Class getColumnClass(int c) { return getValueAt(0, c).getClass(); }@Override public boolean isCellEditable(int row, int column) { if (column == 1 || column == 2) { return false; } else { return true; } } }
在這個例子中,ExampleTableModel類保持包含表數(shù)據(jù)的兩個字符串是有意義的。然后,getRowCount, getColumnCount,getValueAt和getColumnName方法可以使用陣列來為表提供的值。另外,請注意如何isCellEditable編寫該方法以禁止編輯前兩列。
現(xiàn)在,JTable我們可以使用以下ExampleTableModel類來代替使用兩個數(shù)組來創(chuàng)建對象:
JTable table = new JTable(new ExampleTableModel());
代碼運行時,您將看到JTable對象正在使用表模型,因為沒有表單元格可編輯,并且正確使用了列名稱。如果getColumnName方法尚未實現(xiàn),則表上的列名將顯示為A,B,C,D等的默認名稱。
我們現(xiàn)在考慮一下該方法 getColumnClass。僅這一點使得表模型值得實現(xiàn),因為它為JTable對象提供了每列中包含的數(shù)據(jù)類型。如果您還記得,對象數(shù)據(jù)數(shù)組有兩列不是String數(shù)據(jù)類型:Place包含int的World Record列和包含的列booleans。了解這些數(shù)據(jù)類型會更改JTable對象為這些列提供的功能。運行帶有表模型的示例表代碼意味著該World Record列實際上將是一系列復(fù)選框。
添加ComboBox編輯器
您可以為表中的單元格定義自定義編輯器。例如,您可以使組合框替換字段的標(biāo)準(zhǔn)文本編輯。
以下是使用JComboBoxcountry字段的示例 :
String[] countries = {"Australia", "Brazil", "Canada", "China" ,"France", "Japan", "Norway", "Russia", "South Korea" , "Tunisia", "USA"}; JComboBox countryCombo = new JComboBox(countries);
要設(shè)置country列的默認編輯器,請使用TableColumn該類獲取對country列的引用,并使用該setCellEditor方法將該列設(shè)置JComboBox為單元格編輯器:
TableColumn countryColumn = table.getColumnModel().getColumn(2); countryColumn.setCellEditor(new DefaultCellEditor(countryCombo));
感謝各位的閱讀!看完上述內(nèi)容,你們對使用JTable創(chuàng)建Java表的方法大概了解了嗎?希望文章內(nèi)容對大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
新聞標(biāo)題:使用JTable創(chuàng)建Java表的方法
網(wǎng)頁網(wǎng)址:http://www.muchs.cn/article42/ihpghc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、靜態(tài)網(wǎng)站、手機網(wǎng)站建設(shè)、企業(yè)建站、軟件開發(fā)、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)