2012-12-28 56 views
2

我試圖根據JTable中的第一列值對特定行着色,但下面的代碼根據行索引爲行着色。我的桌子只有四列。第一列有ID號碼。我需要根據這些ID號對行進行着色。例如,如果第一個ID是0,第二個也是0,它們都應該是「lightGray」。有什麼想法嗎?根據JTable中的第一列值爲特定行着色?

table_1 = new JTable(){ 
    public Component prepareRenderer(TableCellRenderer renderer,int Index_row, int Index_col) { 
     Component comp = super.prepareRenderer(renderer,Index_row, Index_col); 
      //even index, selected or not selected 
      if (Index_row % 2==0 && !isCellSelected(Index_row, Index_col)) { 
       comp.setBackground(Color.lightGray); 
      } else { 
       comp.setBackground(Color.white); 
      } 
      return comp; 
     } 
    }; 

這是現在的樣子:

How it should look like

+1

而你的問題是? –

+0

爲了便於閱讀,請使用常見的Java命名約定;爲了安全起見,請使用'@ Override'註釋。 – trashgod

回答

6

你的渲染是基於傳遞給prepareRenderer()row參數選擇的顏色。謂詞row % 2 == 0選擇交替行進行着色,如圖所示。你的問題意味着你實際上想要在零列的值ID上加上陰影。爲此,您需要檢查getValueAt(row, 0)的結果。

確切的公式取決於您的模型。使用此example,以下呈現器着色以字母「T」開頭的行。

private JTable table = new JTable(dataModel) { 

    @Override 
    public Component prepareRenderer(TableCellRenderer renderer, int row, int col) { 
     Component comp = super.prepareRenderer(renderer, row, col); 
     int modelRow = convertRowIndexToModel(row); 
     if (((String) dataModel.getValueAt(modelRow, 0)).startsWith("T") 
      && !isCellSelected(row, col)) { 
      comp.setBackground(Color.lightGray); 
     } else { 
      comp.setBackground(Color.white); 
     } 
     return comp; 
    } 
}; 

​​

附錄:@mKorbel有益評論就需要模型視圖時啓用排序,作爲討論here座標之間的轉換。

+0

+1安全可能是'int modelRow = convertRowIndexToModel(row);'for'dataModel.getValueAt' – mKorbel

+0

@mKorbel:對的,你是!反過來將適用於'SelectionAction'。感謝您的評論;更新。 – trashgod

+0

謝謝!這非常有用。 – user1935373

相關問題