title: Change the font color in a specific cell of a JTable?
body: <p>Before starting, I've viewed a handful of solutions as well as documentation. I can't seem to figure out why my code isn't working the way I believe it should work. I've extended DefaultTableCellRenderer but I don't believe it is being applied - that or I messed things up somewhere.</p>
  
  <p>Here are the threads / websites I've looked into before posting this question:</p>
  
  <ul>
  <li><a href="https://stackoverflow.com/questions/14546968/swing-is-it-possible-to-set-the-font-color-of-specific-text-within-a-jtable">Swing - Is it possible to set the font color of &#39;specific&#39; text within a JTable cell?</a></li>
  <li><a href="https://stackoverflow.com/questions/6644922/jtable-cell-renderer">JTable Cell Renderer</a></li>
  <li><a href="http://docs.oracle.com/javase/tutorial/uiswing/components/table.html" rel="nofollow noreferrer">http://docs.oracle.com/javase/tutorial/uiswing/components/table.html</a></li>
  </ul>
  
  <p>I realize the first link uses HTML to change the font color, but I would think the way I went about it should produce the same result.</p>
  
  <p>To make it easier on those who want to help me figure out the issues, I've created an SSCCE.</p>
  
  <pre><code>import java.awt.Color;
  import java.awt.Component;
  import java.awt.Dimension;
  import java.awt.Font;
  import javax.swing.JFrame;
  import javax.swing.JScrollPane;
  import javax.swing.JTable;
  import javax.swing.table.DefaultTableCellRenderer;
  import javax.swing.table.DefaultTableModel;
  
  
  public class TableTest {
  
      private static final int IMPORTANT_COLUMN = 2;
  
      public static void createAndShowGUI() {
          Object[][] data = new Object[2][4];
          //create sample data
          String[] realRowData = { "1", "One", "1.0.2", "compile" };
          String[] fakeRowData = { "2", "Two", "1.3.2-FAKE", "compile" };
          //populate sample data
          for(int i = 0; i &lt; realRowData.length; i++) {
              data[0][i] = realRowData[i];
              data[1][i] = fakeRowData[i];
          }
  
          //set up tableModel
          JTable table = new JTable();
          table.setModel(new DefaultTableModel(data, 
                  new String[] { "ID #", "Group #", "version", "Action" }) 
  
              {
                  Class[] types = new Class[] {
                      Integer.class, String.class, String.class, String.class
                  };
  
                  boolean[] editable = new boolean[] {
                      false, false, true, false  
                  };
  
                  @Override
                  public Class getColumnClass(int columnIndex) {
                      return types[columnIndex];
                  }
  
                  @Override
                  public boolean isCellEditable(int rowIndex, int columnIndex) {
                      return editable[columnIndex];
                  }
              });
  
          //set custom renderer on table
          table.setDefaultRenderer(String.class, new CustomTableRenderer());
  
          //create frame to place table
          JFrame f = new JFrame();
          f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          f.setMinimumSize(new Dimension(400, 400));
          JScrollPane scrollPane = new JScrollPane();
          scrollPane.setViewportView(table);
          f.add(scrollPane);
          f.pack();
          f.setVisible(true);
  
      }
  
      //MAIN
      public static void main(String[] args) {
          javax.swing.SwingUtilities.invokeLater(new Runnable() {
  
              public void run() {
                  createAndShowGUI();
              }
          });
      }
  
      //Custom DefaultTableCellRenderer
      public static class CustomTableRenderer extends DefaultTableCellRenderer {
          public Component getTableCellRenderer(JTable table, Object value,
                  boolean isSelected, boolean hasFocus, int row, int column)
          {
              Component c = super.getTableCellRendererComponent(table, value, isSelected,
                      hasFocus, row, column);
  
              String versionVal = table.getValueAt(row, IMPORTANT_COLUMN).toString();
  
              if(versionVal.contains("FAKE")) {
                  //set to red bold font
                  c.setForeground(Color.RED);
                  c.setFont(new Font("Dialog", Font.BOLD, 12));
              } else {
                  //stay at default
                  c.setForeground(Color.BLACK);
                  c.setFont(new Font("Dialog", Font.PLAIN, 12));
              }
              return c;
          }
  
      }
  }
  </code></pre>
  
  <p>My goal is to highlight any value in the version column that contains the word <code>FAKE</code> in a red bold text.</p>