Java Swing: Rendeder not being called

I have created a custom renderer class that extends DefaultTableCellRenderer.

This code works fine with the example I have attached.

But, the funny thing is that the ColorRenderer is not being called by to another table with a custom table model that I created (it extends DefaultTableModel).

I added this code to getTableCellRendererComponent():
System.out.println(row + " " + column);

When I run the test code to the example below, all the row and column numbers are printed. However, this does not happen for my table!

If possible, please let me know what I could be missing. Thanks!
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import java.awt.*;

public class TableRowColor2 extends JFrame

    {
         static  JTable table;
     public TableRowColor2()
         {
              table=new JTable(new DefaultTableModel(new Object[][]{
             {"1","2","3","4"},
             {"2","3","4","5"},
             {"3","4","5","6"},
         {"4","5","6","7"}},
         new Object[]{"A","B","C","D"}));

            // table.setDefaultRenderer(Object.class, new ColorRenderer(1,1));

              //  table.setDefaultRenderer(Object.class, new ColorRenderer(2,2));


         JScrollPane scroll=new JScrollPane(table);
         this.setContentPane(scroll);
         this.setBounds(100,50,300,150);
     }
     public static void main (String arg[])
         {
         TableRowColor2 tes = new TableRowColor2();
         tes.setVisible(true);

               table.setDefaultRenderer(Object.class, new ColorRenderer(1,1));
             System.out.println("here 1");
              try{
                           Thread.currentThread().sleep(5000);
             } catch(Exception ex){
                 ex.printStackTrace();
             }
             System.out.println("here 2");
             table.setDefaultRenderer(Object.class, new ColorRenderer(2,2));
             tes.repaint();
             System.out.println("here 3");
         tes.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     }
}


class ColorRenderer extends  DefaultTableCellRenderer
    {
     private String columnName;
        int row1;
        int column1;
     public ColorRenderer(int row1, int column1)
         {
         this.row1 = row1;
             this.column1 = column1;
        // this.columnName = column;
         setOpaque(true);
     }
     public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column)
         {
             if (row == row1 && column == column1)setBackground(Color.red);
             else  setBackground(Color.gray);

         return this;
     }
}

Open in new window

dshrenikAsked:
Who is Participating?
 
for_yanConnect With a Mentor Commented:
Well, it is difficult to gess this way - I think the way to go - if it is complex program - try to simplify it gradually (say simplify contents of your sells) up to the point when it  either
starts working correctly or will be suitable to post it here. If it starts working then you'll have a clue
what was obstructiong, otherwise I  would be able to try the simplified version in my IDE and
help to trouble shoot it for you. Well, there is only one way of dioing things right; one can screw up things in zillion ways -
it is very difficult to guess what you may be doing wrong
0
 
for_yanCommented:
But you posted the code which is working?
It is of little help to figure out why your different code is not working.

Are you sure you are setting renderer to your table?
0
 
for_yanCommented:


Do you have someyhing similar to this statemnet in your code:
            table.setDefaultRenderer(Object.class, new ColorRenderer(1,1));
add System.out.printn("something") - just before and just after this line to make sure this line gert executed
0
Cloud Class® Course: Microsoft Office 2010

This course will introduce you to the interfaces and features of Microsoft Office 2010 Word, Excel, PowerPoint, Outlook, and Access. You will learn about the features that are shared between all products in the Office suite, as well as the new features that are product specific.

 
for_yanCommented:
add repaint() method to invoked on your table or even JFrame after you set cell renderer -
method getComponent... gets called when the table is repainted
0
 
dshrenikAuthor Commented:
I do have this line:
 table.setDefaultRenderer(Object.class, new ColorRenderer(1,1));

I am able to print text beofre and after it is called.

Adding repaint() does not seem to work.
0
 
for_yanCommented:

try to resize your window after it appears - doesn't it paint the cell after resizing ?
0
 
dshrenikAuthor Commented:
No! :(
0
 
CEHJCommented:
Please post your actual code
0
 
dshrenikAuthor Commented:
Sorry. It's my mistake. I have a custom renderer defined within the constructor!
:-/
0
 
CEHJCommented:
? Accepting your own comment should be what you did...
0
 
for_yanCommented:
Great!
0
 
dshrenikAuthor Commented:
@CEHJ:
Sorry about that. Wanted to give for_yan some credit since he spent a lot time helping me fix the bug.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.