TableColumn 是包含在 TableColumnModel 裏面,而 JTable 包含一個 TableColumnModel。所以要取得 TableColumn 必須先取得 TableColumnModel 才可以。另外 JTable 也提供一個 getColumn(Object identifier) 函數來取得 TableColumn,主要也是透過 TableColumnModel.getColumnIndex(Object identifier) 來取得。

  1. TableColumn getColumn(int columnIndex)

    返回 columnIndex 位置列的 TableColumn 物件。

  2. int getColumnIndex(Object columnIdentifier)

    返回該表中首列的索引,使用 equals 進行比較時,該列的標識符等於 identifier。

  3. int getColumnIndexAtX(int xPosition)

    返回位於該水平點 xPosition 位置列的索引;如果該點位於任何列邊界外,則返回 -1。

真正來說,要取得 TableColumn 只能透過 getColumn 函數,而 getColumnIndex 及 getColumnIndexAtX 只能取得 column index,要取得 TableColumn 還要再執行 getColumn 才可以。

TableColumnModel.getColumnIndex 中的 identifier 是什麼東西呢?從 SDK 原始碼來看,identifier 是放在 TableColumn.java 內的一個 protected Object identifier;。預設值是 null,可透過 TableColumn.setIdentifier 變更,TableColumn.getIdentifier 取得其值。但是當 identifier=null 時,TableColumn.getIdentifier 卻傳回 TableColumn.getHeaderValue,所以預設 identifier = headerValue。

// DefaultTableColumnModel.java public int getColumnIndex(Object identifier) { ...... while (enumeration.hasMoreElements()) { aColumn = (TableColumn)enumeration.nextElement(); if (identifier.equals(aColumn.getIdentifier())) return index; index++; } ...... // TableColumn.java public Object getIdentifier() { return (identifier != null) ? identifier : getHeaderValue(); }

所以要取得 TableColumn 可以用 column index 或是 column name。

  1. JTable.getColumnModel().getColumn(column index)
  2. JTable.getColumn(column name)

程式範例

TableModel jTable1Model = new DefaultTableModel( new String[][] {{ "One", "Two" },{ "Three", "Four" }}, new String[] { "Column 1", "Column 2" }); jTable1 = new JTable(); jScrollPane1.setViewportView(jTable1); jTable1.setModel(jTable1Model); jTable1.getColumn("Column 1").setPreferredWidth(300);

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()