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

看板java作者 (再努力一點)時間11年前 (2013/10/18 09:30), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/8 (看更多)
※ 引述《sbrhsieh (十年一夢)》之銘言: : ※ 引述《prjryu (再努力一點)》之銘言: : : 下面綠色的部份是我所說改變的地方,對table而言我insert的row仍然是obj陣列, : : 但我不懂是否是您所說的需要跟著改default cell renderer的情況。 : : 如果需要更動的話應該如何更動呢? : : 我的default cell renderer會去取table裡cell的值計算判斷是否染色, : : 現在遇到的問題是, : : 那個被我以double形態轉成obj型態insert入table的cell不會染色 : : 這種cell重畫的時候沒有call到我所set的DefaultRenderer...orz : : strData = BufferedStream.readLine(); : : StringTokenizer st = new StringTokenizer(strData, "\t"); : : st = new StringTokenizer(strData, "\t"); : : tokens = new Object[15]; : : for( i=0, j=st.countTokens(); i < j; i++) : : { : : jLabel1.setText("token: "+j); : : if( i > 2 ) : : { : : //放<double>後table才能正確排序,但DefaultTableCellRenderer無法正確上色 : : tokens[i] = Double.parseDouble( st.nextToken() ); : : //原:tokens[i] = st.nextToken();//放<obj>後table才能正確上色,但無法正確排序 : : } : : else : : { : : tokens[i] = st.nextToken(); : : } : : } : : defaultTableModel.addRow(tokens); : 你得提供你的 table cell renderer 的碼才有助找出問題點。 : 你把 model 內的數據從 string 改成 double,那麼你在 table cell renderer : 判斷要不要標記的作法一定會受影響,你也要一併改寫,目前就是沒有這部分的 : 資訊。 : 如果你的 JTable 應用很複雜,建議你可以考慮使用 SwingX 之類的套件或許會 : 輕鬆一點。 感謝sbrhsieh大的回覆 在此附上我的 table cell renderer 的碼 public class MainWindow extends javax.swing.JFrame { ... public static double[] dbLow = new double[11]; public static double[] dbHeigh = new double[11]; ... jTable.setDefaultRenderer(Object.class,new ColorTable()); ... } class ColorTable extends DefaultTableCellRenderer { private static final long serialVersionUID = 1L; public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int col) { super.getTableCellRendererComponent(table,value,isSelected,hasFocus, row,col); Color foreground, background; double dbValue = 0; dbValue = Double.parseDouble( MainWindow.jTable.getValueAt( row, col).toString()); if( dbValue < MainWindow.dbLow[col] || dbValue > MainWindow.dbHeigh[col] ) { foreground = Color.WHITE; background = Color.RED; } else { foreground = Color.BLACK; background = Color.GRAY; } setForeground(foreground); setBackground(background); //System.out.println( "COLOR cell: " + row + ", " + col ); return this; } } 不確定問題是否在這邊,因為我的認知是table開到哪cell就會畫到哪才對... 所以在這邊我有試著印出有被我改顏色的cell的row和column號, 有發現JTable裡被我塞double的obj cell沒有印位置出來 (正常來說是要通通會印出來才對) -- 郵差又來送羊奶了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.250.192.238 ※ 編輯: prjryu 來自: 60.250.192.238 (10/18 09:33)
文章代碼(AID): #1IO8ym3w (java)
討論串 (同標題文章)
文章代碼(AID): #1IO8ym3w (java)