2016-01-11 52 views
5

特定細胞我正在尋找這個問題的解決方案: 我有一個Excel文件,它包含的數據。一些細胞有黃色背景。我已經創建了一個將文本導入到JTable的代碼,這很好。但我想要將背景單元格顏色也導入到特定的單元格中。在這個例子中的簡單-起見,我沒有使用循環,閱讀從源代碼等Excel數據讀取我明白我需要CustomCellRenderer論壇結束後。顏色只有在JTable中

我遇到了這種方法的問題,因爲此代碼首先正確地對列中的單元格進行了顏色,但是當我開始滾動此表中的彩色單元格時,它會將整列重新着色爲黃色。 (見截圖)

我想我可以添加else語句具體顏色剩餘的細胞爲白色,但這種方法不會爲我工作,因爲我將覆蓋我的前一小區的結果。

你能指出我在這一個解決方案嗎? (這是一個錯誤,或JTable的預期行爲?)。我使用NetBeans和GUI拖n個墨滴發生器

enter image description here

import java.awt.Color; 
import java.awt.Component; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableCellRenderer; 

public class MyRenderer extends DefaultTableCellRenderer { 

    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
     Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 

     int[][] coordinatesYellow = new int[3][2]; 
     //[row][column] these cells are yellow 
     coordinatesYellow[0][0] = 3; 
     coordinatesYellow[0][1] = 2; 
     coordinatesYellow[1][0] = 4; 
     coordinatesYellow[1][1] = 2; 
     coordinatesYellow[2][0] = 2; 
     coordinatesYellow[2][1] = 2; 

     for (int i = 0; i < 3; i++) { 
      if ((row == coordinatesYellow[i][0]) && (column == coordinatesYellow[i][1])) { 
       c.setBackground(Color.yellow); 
      } 
     } 
     return c; 
    } 
} 



// And this is the statement I use for calling the renderer: 
// resultsTable.getColumnModel().getColumn(0).setCellRenderer(new MyRenderer()); 
+0

@TT - 您的評論基本上是一個完整的答案。 – tucuxi

+0

@tucuxi沒錯,它聽起來那麼微不足道我張貼註釋。我已經做出了答案。 –

+0

另請參閱http://stackoverflow.com/questions/22606227/colored-table-cells(甚至可能是重複的...) – Marco13

回答

2

使它所以當你的電池不應該是黃色的,你設置的背景爲白色(或表的背景色) 。

擴展DefaultTableCellRenderer的渲染器使用相同的組件(一個JLabel)作爲所有單元的模板(參見DefaultTableCellRenderer實現說明 - 他們稱之爲橡皮圖章)。一旦將其背景設置爲黃色,它將保持黃色以呈現連續的單元格,直到您再次更改其背景顏色。

更換你的for循環的東西,如下列:

boolean isYellow = false; 
for (int i = 0; i < 3; i++) { 
      if ((row == coordinatesYellow[i][0]) && (column == coordinatesYellow[i][1])) { 
       c.setBackground(Color.yellow); 
       isYellow = true; 
      } 
     } 
if(!isYellow) 
    c.setBackground(Color.white); 
+0

這不符合預期。如果我添加else語句進入for循環,結果是隻有sampletext細胞是黃色,因爲for循環覆蓋的結果。 – radox1912

+1

@ radox1912在**所有**情況下,如果您沒有將顏色設置爲黃色,那意味着如果您沒有設置任何顏色爲黃色,則應將其設置爲白色。 –

+0

@ radox1912我已經添加了一段反映我聲明的代碼段。 –