Metodo sendo invocado

Ola pessoal, estou retornando a estudar java e me deparei com uma situação que não havia prestado atenção antes.

Tem-se a seguinte classe:

import java.awt.Color;
import java.awt.Component;
import java.text.NumberFormat;
import java.util.Locale;


import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

public class NumberCellRenderer extends DefaultTableCellRenderer {

    
	Locale ptBR = new Locale("pt", "BR");
	private static final long serialVersionUID = 1L;
	
	NumberFormat numberFormat = NumberFormat.getCurrencyInstance(ptBR);

    @Override
    public Component getTableCellRendererComponent(JTable jTable, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        Component c = super.getTableCellRendererComponent(jTable, value, isSelected, hasFocus, row, column);
        if (c instanceof JLabel && value instanceof Number) {
            JLabel label = (JLabel) c;
            label.setHorizontalAlignment(JLabel.RIGHT);
            Number num = (Number) value;
            String text = numberFormat.format(num);
            label.setText(text);            
            label.setForeground(num.doubleValue() < 0 ? Color.RED : Color.BLACK);
        }
        return c;
    }
}[/code]

que esta sendo estanciada por esta outra classe:
[code]package com.javarichclient.table;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;

/**
 *
 * @author jbliao
 */
public class NumberCellRendererDemo {

    public static void main(String args[]) {
        JFrame f = new JFrame("NumberCellRendererDemo");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        DefaultTableModel model = new DefaultTableModel();
        model.setRowCount(5);
        model.setColumnCount(5);
        for(int r=0; r < model.getRowCount(); r++ ) {
            for( int c=0; c < model.getColumnCount(); c++ ) {
               // model.setValueAt(Math.random()*1e6 - 0.5e6, r, c);
            	model.setValueAt(Math.random()*10*10, r, c);
            }
        }

        JTable table = new JTable(model);
       // table.setDefaultRenderer(Object.class, new NumberCellRenderer());
        TableColumn teste = table.getColumnModel().getColumn(4);
        teste.setCellRenderer(new NumberCellRenderer());

        f.getContentPane().add(new JScrollPane(table));
        f.pack();
        f.setVisible(true);
        
    }
    
}

O que está comentado é o estado original da classe, eu mudei para ver se funcionava de outra forma e funcionou!

Mas a minha questão é: Qual a regra para que o objeto da classe chame um metodo sem invoca-lo(claro quando ele não eh um metodo construtor)? como na situação acima.

depois eu tentei assim:

NumberCellRenderer render = new NumberCellRenderer(); JTable table = new JTable(model); // table.setDefaultRenderer(Object.class, new NumberCellRenderer()); TableColumn teste = table.getColumnModel().getColumn(4); teste.setCellRenderer(render);
Claro, funcionou.

o certo não seria:

        NumberCellRenderer render = new NumberCellRenderer();
        JTable table = new JTable(model);
       // table.setDefaultRenderer(Object.class, new NumberCellRenderer());
        TableColumn teste = table.getColumnModel().getColumn(4);
        [teste.setCellRenderer(render.getTableCellRendererComponent(com os argumentos));

Isso deve ser o basico, mas estou nessa situação, ainda bem que nao ganho dinheiro com java hehehe

Como isso acontece onde posso ler sobre o assunto?
Obrigado desde ja!

Nesse exemplo que voce colocou:

NumberCellRenderer render = new NumberCellRenderer(); JTable table = new JTable(model); // table.setDefaultRenderer(Object.class, new NumberCellRenderer()); TableColumn teste = table.getColumnModel().getColumn(4); teste.setCellRenderer(render);

Acredito que sua duvida esteja em:

teste.setCellRenderer(render);

Isso ai nao quer dizer que o render está chamando um metodo sem invocalo. Na verdade, isso esta dizendo que o metodo setCellRenderer consegue receber um objeto do tipo NumberCellRenderer.

Abraços

Certo brother, mas não eh essa minha duvida.

A questão é como o objeto NumberCellRenderer chama o metodo getTableCellRendererComponet()?

Então, quando uma classe tem so um metodo(nesse caso getTableCellRendererComponet() ), o seu construtor “oculto” invoca automaticamente seu unico metodo( não construtor)?