基本信息
JTableextends JComponentimplements TableModelListener, Scrollable, TableColumnModelListener, ListSelectionListener, CellEditorListener, Accessible, RowSorterListener
JTable 有很多用來自定義其呈現和編輯的工具,同時提供了這些功能的默認設定,從而可以輕鬆地設定簡單表。例如,要設定一個 10 行 10 列的表: TableModel dataModel = new AbstractTableModel() { public int getColumnCount() { return 10; } public int getRowCount() { return 10;} public Object getValueAt(int row, int col) { return new Integer(row*col); } }; JTable table = new JTable(dataModel); JScrollPane scrollpane = new JScrollPane(table); 注意,如果要在單獨的視圖中(在 JScrollPane 外)使用 JTable 並顯示錶標題,則可以使用 getTableHeader() 獲取並單獨顯示它。 要啟用行的排序和過濾,請使用 RowSorter。可以通過以下兩種方式之一設定一個行排序器。 直接設定 RowSorter。例如:table.setRowSorter(new TableRowSorter(model))。
將 autoCreateRowSorter 屬性設定為 true,從而 JTable 可用於創建 RowSorter。例如:setAutoCreateRowSorter(true)。
設計使用 JTable 的應用程式時,務必要注意用來表示表數據的數據結構。DefaultTableModel 是一個模型實現,它使用一個 Vector 來存儲所有單元格的值,該 Vector 由包含多個 Object 的 Vector 組成。除了將數據從應用程式複製到 DefaultTableModel 中之外,還可以用 TableModel 接口的方法來包裝數據,這樣可將數據直接傳遞到 JTable,如上例所示。這通常可以提高應用程式的效率,因為模型可以自由選擇最適合數據的內部表示形式。在決定使用 AbstractTableModel 還是使用 DefaultTableModel 方面有一個好的實踐經驗,即在創建子類時使用 AbstractTableModel 作為基類,在不需要創建子類時則使用 DefaultTableModel。 源分布演示部分中的 "TableExample" 目錄給出了許多 JTable 用法的完整示例,包括如何使用 JTable 來提供一個可編輯的數據視圖(數據取自資料庫),以及如何修改顯示的列以使用指定的渲染器和編輯器。 JTable 使用專有的整數來引用它所顯示的模型的行和列。JTable 採用表格的單元格範圍,並在繪製時使用 getValueAt(int, int) 從模型中獲取值。務必記住各種 JTable 方法所返回的列和行索引是就 JTable(視圖)而言的,不一定是模型所使用的那些索引。 默認情況下,在 JTable 中對列進行重新安排,這樣在視圖中列的出現順序與模型中列的順序不同。但這根本不影響模型的實現:當列重新排列時,JTable 在內部保持列的新順序,並在查詢模型前轉換其列索引。 因此編寫 TableModel 時,不必偵聽列的重排事件,因為不管視圖怎樣,模型都將在其自己的坐標系統被查詢。在示例部分中有一個排序算法的演示,此演示正是使用了此技術在另一個坐標系統中進行排序,其中更改了行順序,沒有更改列順序。 類似地,使用 RowSorter 提供的排序和過濾功能時,底層 TableModel 不需要知道怎樣進行排序,RowSorter 將處理它。對底層 TableModel 使用 JTable 的基於行的方法時,必須進行坐標轉換。所有基於 JTable 行的方法都是就 RowSorter 而言的,不一定與底層 TableModel 的方法相同。例如,選擇始終是就 JTable 而言的,因此使用 RowSorter 時,需要使用 convertRowIndexToView 或 convertRowIndexToModel 進行轉換。以下代碼顯示了如何將 JTable 的坐標轉換為底層模型的坐標
欄位摘要
欄位摘要 | |
static int | AUTO_RESIZE_ALL_COLUMNS 在所有的調整大小操作中,按比例調整所有的列。 |
static int | AUTO_RESIZE_LAST_COLUMN 在所有的調整大小操作中,只對最後一列進行調整。 |
static int | AUTO_RESIZE_NEXT_COLUMN 在 UI 中調整了一個列時,對其下一列進行相反方向的調整。 |
static int | AUTO_RESIZE_OFF 不自動調整列的寬度;使用滾動條。 |
static int | AUTO_RESIZE_SUBSEQUENT_COLUMNS 在 UI 調整中,更改後續列以保持總寬度不變;此為默認行為。 |
protected boolean | autoCreateColumnsFromModel 如果為 true,則表對 TableModel 進行查詢以構建默認列集。 |
protected int | autoResizeMode 確定表是否自動調整列的寬度以占用表的整個寬度,以及如何進行調整。 |
protected TableCellEditor | cellEditor 活動單元格編輯器對象,它重寫當前單元格占用的螢幕空間,並允許用戶更改其內容。 |
protected boolean | cellSelectionEnabled 從 Java 2 平台 v1.3 開始已過時。 |
protected TableColumnModel | columnModel 表的 TableColumnModel。 |
protected TableModel | dataModel 表的 TableModel。 |
protected Hashtable | defaultEditorsByColumnClass 一個由對象組成的表,它顯示並編輯單元格的內容,通過在 TableModel 接口的 getColumnClass 中所聲明的類建立索引。 |
protected Hashtable | defaultRenderersByColumnClass 一個由對象組成的表,它顯示單元格的內容,通過在 TableModel 接口的 getColumnClass 中所聲明的類建立索引。 |
protected int | editingColumn 標識所編輯的單元格的列。 |
protected int | editingRow 標識所編輯的單元格的行。 |
protected Component | editorComp 在編輯時處理編輯的 Component。 |
protected Color | gridColor 格線的顏色。 |
protected Dimension | preferredViewportSize Scrollable 接口使用它來確定初始的可見區域。 |
protected int | rowHeight 表中每一行的高度,以像素為單位。 |
protected int | rowMargin 每行中單元格之間間距的高度,以像素為單位。 |
protected boolean | rowSelectionAllowed 如果行選擇在此表中是允許的,則返回 true。 |
protected Color | selectionBackground 已選定單元格的背景色。 |
protected Color | selectionForeground 已選定單元格的前景色。 |
protected ListSelectionModel | selectionModel 表的 ListSelectionModel,用來追蹤行選擇。 |
protected boolean | showHorizontalLines 如果 showHorizontalLines 為 true,則表在單元格之間繪製水平行。 |
protected boolean | showVerticalLines 如果 showVerticalLines 為 true,則表在單元格之間繪製垂直行。 |
protected JTableHeader | tableHeader 表所使用的 TableHeader。 |
從類 javax.swing.JComponent繼承的欄位 |
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW |
從類 java.awt.Component繼承的欄位 |
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT |
從接口 java.awt.image.ImageObserver繼承的欄位 |
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH |
構造方法摘要 | |
JTable() 構造一個默認的 JTable,使用默認的數據模型、默認的列模型和默認的選擇模型對其進行初始化。 | |
JTable(int numRows, int numColumns) 使用 DefaultTableModel 構造具有 numRows 行和 numColumns 列個空單元格的 JTable。 | |
JTable(Object[][] rowData, Object[] columnNames) 構造一個 JTable 來顯示二維數組 rowData 中的值,其列名稱為 columnNames。 | |
JTable(TableModel dm) 構造一個 JTable,使用數據模型 dm、默認的列模型和默認的選擇模型對其進行初始化。 | |
JTable(TableModel dm, TableColumnModel cm) 構造一個 JTable,使用數據模型 dm、列模型 cm 和默認的選擇模型對其進行初始化。 | |
JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm) 構造一個 JTable,使用數據模型 dm、列模型 cm 和選擇模型 sm 對其進行初始化。 | |
JTable(Vector rowData, Vector columnNames) 構造一個 JTable 來顯示 Vector 所組成的 VectorrowData 中的值,其列名稱為 columnNames。 |