Re: [問題] JTable的排序與上色
※ 引述《sbrhsieh (十年一夢)》之銘言:
: 拼湊所有你提供的碼來看,有一些部分要釐清。
: 1) 你若使用 DefaultTableModel,這個 model 會把所有 column 都當作 Object
: type的數據,當你為 Object type 設定 default cell renderer 後,所有的
: column 都會使用同一個 cell renderer 來繪製 cell 外觀。
: 但實際上放進 model 的數據中,某些 column 的部分是使用 String,某些 column
: 是 Double,那麼你設計的 cell renderer(ColorTable) 必須能該處理這些不同的
: 數據型別才行。
: 2) ColorTable::getTableCellRendererComponent 一律試著把每個 cell 內的
: 數據轉成 String 後以 Double.parseDouble interpret 成 double 數值,在依值
: 來決定要顯示的顏色。
: 這個作法必須要放 String 數據的 column 裡的 cell value(String) 的內容都
: 是可以 parse 成 double 的(如 "10" 非 "abc")。
: 說起來非 Double 數據的 column 出錯機會比較高,但你的觀察顯示似乎是 Double
: column 沒有使用 ColorTable 來做 rendering,有一種可能性在是你非直接使用
: DefaultTableModel 而是使用自己改寫過的 table model,你有 override
: getColumnClass method,讓放置 Double 數值的 column(s) 傳回非
: Object.class,因為程式只為 Object type 設定 default cell renderer,所以
: 不是 Object type 的 column 就會使用 JTable 自己預設準備好的 renderer(為
: Object type column 設定 default renderer R,不代表沒有明確設定 default
: renderer 的非 Object type column 都會使用 R,儘管 Object 是任一種 class
: 的 base class)。
: 另外,建議在 getTableCellRendererComponent method 裡直接使用 value 這個
: parameter 帶進來的值,不需要再透過 row, col 值從 table or model 去取值,
: 會比較不易出錯(table, model 都有 getValueAt method,但是兩者的參數 row
: 與 col 的意義不一致)。
感謝您的回覆與建議,
您猜的沒錯,由於需要以數值排序的功能,
所以我override了getColumnClass method,
目的是為了當排序的column型態為double時可以正確以數值大小作為排序依據。
public Class<?> getColumnClass(int column) {
Class<?> returnValue;
if ((column >= 0) && (column < getColumnCount()))
{
if(getValueAt(0, column)!=null)
{
returnValue = getValueAt(0, column).getClass();
}
else
{
returnValue = Object.class;
}
} else
{
returnValue = Object.class;
}
return returnValue;
}
根據您的推論
我程式的問題是由於程式只為Object type設定default cell renderer,所以
不是 Object type 的 column 就會使用 JTable 預設準備好的 renderer。
就我的理解,
在此程式的問題在於沒有為Double type設定default cell renderer,所以
不是Double type的column就不會使用JTable我自己預設準備好的 renderer。
但DefaultTableCellRenderer中我只找到也只知道getTableCellRendererComponent
(JTable table, Object value, boolean isSelected, boolean hasFocus, int row,
int column)
這裡可以改寫cell的顏色設定,
請問若要在column為Double type的時候可以正確的使用我設定的default cell
renderer,要如何去修改我的cell renderer(ColorTable) 呢?
--
郵差又來送羊奶了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.250.192.238
討論串 (同標題文章)
java 近期熱門文章
PTT數位生活區 即時熱門文章