io uso una classe apposta che identifica il bottone..

codice:
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.AbstractCellEditor;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;


public class ButtomColumn extends AbstractCellEditor implements TableCellRenderer, TableCellEditor, ActionListener, Globals{

	JTable table;
	JButton renderButton;
	JButton editButton;
	String text;
	
	public ButtomColumn(JTable table, int column){
		super();
		this.table = table;
		renderButton = getJButton();
		editButton = getJButton();
		editButton.setFocusPainted( false );
		editButton.addActionListener( this );

		TableColumnModel columnModel = table.getColumnModel();
		columnModel.getColumn(column).setCellRenderer( this );
		columnModel.getColumn(column).setCellEditor( this );
		
	}
	
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
      
       if(value == null){
    	   renderButton.setText("");
       }else{
    	   renderButton.setText(value.toString());
       }
       
       // il metodo restituisce un panel per evitare il ridimensionamento del jButton
       JPanel jPanel = new JPanel();
       jPanel.setBackground(table.getBackground());
       jPanel.setLayout(new GridBagLayout());
       jPanel.add(renderButton, new GridBagConstraints());
       jPanel.add(renderButton);
       
       return jPanel;
   }

   public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column){
	   if(value==null){
		   text = "";
	   }else{
		   text = value.toString();
	   }
       editButton.setText( text );
       return editButton;
   }

   public Object getCellEditorValue(){
       return text;
   }

   public void actionPerformed(ActionEvent e){
       fireEditingStopped();
       System.out.println( e.getActionCommand() + " : " + table.getSelectedRow());
   }
   
   private javax.swing.JButton getJButton() {
		JButton jButton = new JButton();
		jButton.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
		jButton.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
		jButton.setPreferredSize(new Dimension(30, 28));
		jButton.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 12));
		jButton.setIcon(new ImageIcon(getClass().getResource(Globals.IMG_CONSOLE_APRI_PDF)));
		return jButton;
	}

   
}

e alla table specifico che la colonna n appartiene alla classe appena riportata :

codice:
	public javax.swing.JTable getJTable() {

		// PREPARO INTESTAZIONI TABELLA
		String[] columnNames = {"Sel", "Prog", "Num. Ordine", "Data Ordine", "Nome File", "Stato", "Cod Cliente",  "Descr Cliente", "", "Pdf"};
		model = new PersonalTableModel(lista, columnNames);
	    table = new JTable(model);
	    table.getTableHeader().setReorderingAllowed( false );
	    table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
	    table.setPreferredScrollableViewportSize(new Dimension(780,326));

	    
        // colonne personalizzate
		new ImageColumn(table,8);
	    new ButtomColum(table,9);
		
	    // colonne nascoste
		table.removeColumn(table.getColumnModel().getColumn(4));
		table.removeColumn(table.getColumnModel().getColumn(4));
		table.removeColumn(table.getColumnModel().getColumn(4));

		// colonne ridimensionate
		table.setRowHeight(30);
		table.getColumn("Sel").setPreferredWidth(35);
		table.getColumn("Prog").setPreferredWidth(65);
		table.getColumn("Num. Ordine").setPreferredWidth(140);
		table.getColumn("Data Ordine").setPreferredWidth(120);
		table.getColumn("Descr Cliente").setPreferredWidth(380);
		table.getColumn("Pdf").setPreferredWidth(60);
		table.getColumn("").setPreferredWidth(35);
		
	return table;
	}