中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用JTable創建Java表的方法

發布時間:2020-08-20 14:52:19 來源:億速云 閱讀:202 作者:小新 欄目:編程語言

使用JTable創建Java表的方法?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!

Java  提供了一個名為JTable的有用類,使您可以在使用Java的Swing API組件開發圖形用戶界面時創建表。您可以讓用戶編輯數據或只查看數據。請注意,該表實際上并不包含數據 - 它完全是一種顯示機制。

使用JTable創建Java表的方法

注意:  與任何Swing GUI一樣,您需要創建一個容器來顯示  JTable 。

使用數組存儲表數據

為JTable類提供數據的一種簡單方法是使用兩個數組。第一個將列名保存在String數組中:

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 },
{"Ryan", "Lochte", "USA", "200m backstroke", 1, "1:53.94", true },
{"Hugues", "Duboscq", "France", "100m breaststroke", 3, "59.37", false }
};

這里的關鍵是確保兩個數組具有相同的列數。

構建JTable

一旦掌握了數據,創建表就是一項簡單的任務。只需調用JTable 構造函數并將其傳遞給兩個數組:

JTable table = new JTable(data, columnNames);

您可能希望添加滾動條以確保用戶可以看到所有數據。為此,請將其JTable放入JScrollPane:

JScrollPane tableScrollPane = new JScrollPane(table);

現在,當顯示表格時,您將看到數據的列和行,并且可以向上和向下滾動。

JTable對象提供了一個交互式表。如果雙擊任何單元格,您將能夠編輯內容 - 盡管任何編輯僅影響GUI,而不影響基礎數據。(需要實現事件監聽器來處理數據的更改。)。

要更改列的寬度,請將鼠標懸停在列標題的邊緣上,然后前后拖動它。要更改列的順序,請單擊并按住列標題,然后將其拖動到新位置。

對列進行排序

要添加對行進行排序的功能,請調用setAutoCreateRowSorter方法:

table.setAutoCreateRowSorter(true);

當此方法設置為true時,您可以單擊列標題以根據該列下單元格的內容對行進行排序。

改變表的外觀

要控制網格線的可見性,請使用以下setShowGrid方法:

table.setShowGrid(true);

要完全更改表的顏色,請使用setBackground和setGridColor方法:

table.setGridColor(Color.YELLOW);
table.setBackground(Color.CYAN);

默認情況下,表的列寬相等。如果表所在的容器具有可調整大小,則列的寬度將擴大和縮小,容器會變大或變小。如果用戶調整列的大小,則右側列的寬度將更改以適應新的列大小。

可以使用setPreferredWidth方法或列設置初始列寬。使用TableColumn類首先獲取對列的引用,然后使用setPreferredWidth方法設置大小:

TableColumn eventColumn = table.getColumnModel().getColumn(3);
eventColumn.setPreferredWidth(150);
TableColumn placeColumn = table.getColumnModel().getColumn(4);
placeColumn.setPreferredWidth(5);

選擇行

默認情況下,用戶可以通過以下三種方式之一選擇表的行:

要選擇單行,請單擊該行中的表格單元格。

要選擇連續的多行,請將鼠標拖到多行上,或者單擊按下了移位單元格的表格單元格。

要選擇非連續的多行,請在按住控制鍵(Mac的命令鍵)的同時單擊表格單元格。

使用表模型

如果你想要一個可以編輯的簡單的基于字符串的表,那么使用幾個數組作為表的數據會很有用。如果查看我們創建的數據數組,它包含的其他數據類型Strings- Place列包含ints且World Record列包含booleans。然而,這兩列都顯示為字符串。要更改此行為,請創建表模型。

表模型管理要在表中顯示的數據。要實現表模型,可以創建一個擴展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對象中的數據。當擴展一個類來使用AbstractTableModel, ,你只需要在實施getRowCount,getColumnCount和getValueAt方法。

創建一個實現上述五種方法的新類:

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類保持包含表數據的兩個字符串是有意義的。然后,getRowCount, getColumnCount,getValueAt和getColumnName方法可以使用陣列來為表提供的值。另外,請注意如何isCellEditable編寫該方法以禁止編輯前兩列。

現在,JTable我們可以使用以下ExampleTableModel類來代替使用兩個數組來創建對象:

JTable table = new JTable(new ExampleTableModel());

代碼運行時,您將看到JTable對象正在使用表模型,因為沒有表單元格可編輯,并且正確使用了列名稱。如果getColumnName方法尚未實現,則表上的列名將顯示為A,B,C,D等的默認名稱。

我們現在考慮一下該方法  getColumnClass。僅這一點使得表模型值得實現,因為它為JTable對象提供了每列中包含的數據類型。如果您還記得,對象數據數組有兩列不是String數據類型:Place包含int的World Record列和包含的列booleans。了解這些數據類型會更改JTable對象為這些列提供的功能。運行帶有表模型的示例表代碼意味著該World Record列實際上將是一系列復選框。

添加ComboBox編輯器

您可以為表中的單元格定義自定義編輯器。例如,您可以使組合框替換字段的標準文本編輯。

以下是使用JComboBoxcountry字段的示例  :

String[] countries = {"Australia", "Brazil", "Canada", "China"
,"France", "Japan", "Norway", "Russia", "South Korea"
, "Tunisia", "USA"};
JComboBox countryCombo = new JComboBox(countries);

要設置country列的默認編輯器,請使用TableColumn該類獲取對country列的引用,并使用該setCellEditor方法將該列設置JComboBox為單元格編輯器:

TableColumn countryColumn = table.getColumnModel().getColumn(2);
countryColumn.setCellEditor(new DefaultCellEditor(countryCombo));

感謝各位的閱讀!看完上述內容,你們對使用JTable創建Java表的方法大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜州市| 新乡市| 藁城市| 临漳县| 大竹县| 彭阳县| 玉环县| 建始县| 内黄县| 麻江县| 淮滨县| 上蔡县| 伊金霍洛旗| 黄山市| 乌兰察布市| 家居| 昭苏县| 庆阳市| 米易县| 商丘市| 扶余县| 集贤县| 礼泉县| 莱芜市| 亚东县| 延寿县| 南漳县| 甘德县| 静乐县| 望城县| 凤山县| 高邑县| 泉州市| 盈江县| 吉木萨尔县| 炉霍县| 尖扎县| 攀枝花市| 石泉县| 高州市| 德州市|