Re: [問題] JTable的排序與上色

看板java作者 (再努力一點)時間11年前 (2013/10/21 14:51), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串7/8 (看更多)
※ 引述《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
文章代碼(AID): #1IPCxrPk (java)
討論串 (同標題文章)
文章代碼(AID): #1IPCxrPk (java)