How to use a cellRenderer by row

156 Views Asked by At

I am new to using TableCellRenderers. I have used the Orcale documentation and some videos to get one that works. To call the renderer I am using the code:

table.getColumnModel().getColumn(x).setCellRenderer(new Renderer());

For my table, I want to use this for each row. I have tinkered around replacing the columns with rows, but my IDE shows that they're no methods by this name, which I am quite surprised by.

Is there some sort of code that can getRow(x)?

renderer code if needed (the argument was taken out the code above for simplification)

        int t;
        public Renderer(int x){
            this.t=x;
        }
        
        @Override
        public Component getTableCellRendererComponent (JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){

            JLabel x = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

            DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
            
            if(t==1){
                x.setBackground(Color.GREEN);
            }else{
                x.setBackground(Color.WHITE);
            }
            
            return x;
        }
    }
2

There are 2 best solutions below

1
Ashish Purohit On

You can override prepareRenderer method of JTable

        @Override
        public Component prepareRenderer(TableCellRenderer renderer, int row,
        int column) {
            int row = convertRowIndexToModel(row);
            int column = convertColumnIndexToModel(column);
            if (!isRowSelected(row)) {
                if (column != 0 || row != 0) {
                    comp.setBackground(Color.RED);
                } 
            }
            return comp;
       }
    };
0
g00se On

I don't like messing with JTable itself, so maybe

        table.setDefaultRenderer(Object.class, new 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);
                c.setBackground(t == 1 ? Color.green : Color.white);
                return c;
            };
        });