2013-07-18 57 views
2

所以我知道這可能是一個重複的問題,但我已經瀏覽了很多已在此處的內容,而且它們都不適合我,所以我我以爲我會張貼我自己的,希望其他一些有麻煩的人會發現這也有幫助。嘗試在JTable中爲特定單元格着色... getTableCellRendererComponent Override

這裏是我的代碼

table.getColumn("Name").setCellRenderer(
       new DefaultTableCellRenderer() { 
        @Override 
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
         setText(value.toString()); 

         if (row==3) 
         { 
          setForeground(Color.RED); 
         } 
         return this; 
        } 
       } 
      ); 

以下是顯示在JFrame中。正如你所看到的,我試圖只着色「列名」列的第三行中的文本,但它會爲整行添加顏色。 enter image description here

有什麼建議嗎? 謝謝! Canaan

回答

4

渲染對列「Name」是唯一的。當行是3時,您將紅色設置爲前景顏色,但不會將其重置爲其他行,因此當調用畫家時,它總是塗成紅色。 當行是3時,您必須設置爲紅色,但在其他情況下也必須重置原始顏色。

編輯:執行版本。現在原始的前景色被備份,超級用來像其他列一樣渲染。

  table.getColumn("Name").setCellRenderer(
      new DefaultTableCellRenderer() { 

     Color originalColor = null; 

     @Override 
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
      DefaultTableCellRenderer renderer = (DefaultTableCellRenderer) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
      if (originalColor == null) { 
       originalColor = getForeground(); 
      } 
      if (value == null) { 
       renderer.setText(""); 
      } else { 
       renderer.setText(value.toString()); 
      } 

      if (row == 3) { 
       renderer.setForeground(Color.RED); 
      } else { 
       renderer.setForeground(originalColor); // Retore original color 
      } 
      return renderer; 
     } 
    }); 
+0

謝謝!工作很好! – k9b

+0

還有一個問題,是否有setForeground(null)?我想將行== 3設置爲紅色,但不在else {bracket中做任何事情。我只是希望它在那裏基本不做任何事情,但前景黑色大膽,謝謝!基本上Color.BLACK是不是原來的顏色 – k9b

+0

我編輯的解決方案,請檢查它。 – Ezequiel

相關問題