首頁  >  文章  >  Java  >  如何使用JTable建立Java表

如何使用JTable建立Java表

藏色散人
藏色散人原創
2019-01-17 15:15:294975瀏覽

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表的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn