Consider a JTable. It is the "View" component and as such is not aware of any data. It totally relies on the underlying TableModel for the data. Whenever it needs to display any data, it will ask the model internally using the TableModel#getValueAt(int row, int column) Notice this method returns an Object and as such is "raw" data. The table then needs to figure out how to display (or render) it. For this it internally uses the TableModel#getColumnClass()
Now the table has the raw data as well as its class. Then the table will try and decide how to display it using these two values. The default JTable has some built in renderers (e.g. Boolean.class returned from getColumnClass will be rendered as a JCheckBox)
In addition to this, you can provide your own renderers (e.g. if getColumnClass() returns Color.class then the renderer will be a JLabel, colored in that particular color)
If no renderers are found (built in + your custom) then the table will default to plain text (using the value getValueAt().toString()).
Of course this is an over simplified conceptual explanation. If you got any further specific questions, do feel free to ask!