codice:
package Componenti;

import java.awt.BorderLayout;

import java.util.ArrayList;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

	public class IGAppuntamenti extends JFrame 
	{
	    private ModelloTab modelloTab;
	    private JTable table;
	    private JScrollPane scrollPane;
	    private ArrayList<Appuntamento> listaApp;

	    public IGAppuntamenti(ArrayList<Appuntamento> listaApp) 
	    {
	        super ("Elenco Appuntamenti");
	        setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);
	        setSize(450, 350);
	        setVisible(true);
	        
	        
	        modelloTab = new ModelloTab(listaApp);
	        table = new JTable(modelloTab);
	        scrollPane = new JScrollPane(table);
	        getContentPane().add(scrollPane, BorderLayout.CENTER);
	    }
	
	class ModelloTab extends AbstractTableModel
	{
		private ArrayList<Appuntamento> listaAppuntamenti;
		
		public ModelloTab(ArrayList<Appuntamento> listaApp)
		{
			this.listaAppuntamenti=listaApp;
		}
		
		/**Metodo che ritorna il numero di colonne che uso*/
		public int getColumnCount()
		{
			return 6; 
		}

		/**Metodo che ritorna il numero di righe utilizzate*/
		public int getRowCount()
		{
			return listaAppuntamenti.size(); // in base al numero di elementi nell'arraylist
		}

		/**Metodo che ritorna l'oggetto presente nella cella indicata dalle coordinate row e col*/
		public Object getValueAt(int row, int col)
		{
		 Appuntamento app = listaAppuntamenti.get(row);
		 switch (col) 
		 {
	      case 0: return app.getData().getDataCompleta();
	      case 1: return app.getOra().getDataCompleta();
	      case 2: return app.getDescrizione(); 
	      case 3: return app.isAlarm();
	      case 4: return createImage();
	      case 5: return createImage();
		 }
		 return null;
		}

		/**Metodo che ritorna un'immagine*/
	    private ImageIcon createImage() 
	    {
	        ImageIcon icon = new ImageIcon("image/a.jpeg");
	        return icon;
	    }
	    
		/**Meotodo che ritorna in base al numero della colonna passatogli, i titoli delle colonne*/
		public String getColumnName(int column) 
	    {
	        switch (column) 
	        {
	            case 0: return "Data";
	            case 1: return "Ora";
	            case 2: return "Descrizione";
	            case 3: return "Allarme?";
	            case 4: return "Modifica";
	            case 5: return "Cancella";
	        }

	        return ""; // caso default che non si verifica mai se strutturo bene lo switch
	    }
		
		
		/**Metodo che ritorna la classe di cui è composta ogni colonna*/
	    public Class getColumnClass(int column) 
	    {
	        switch (column) 
	        {
	            case 0: return String.class;
	            case 1: return String.class;
	            case 2: return String.class;   
	            case 3: return Boolean.class;   // il renderer/editor di default per Boolean mostra un "checkbox"
	            case 4: return ImageIcon.class;  
	            case 5: return ImageIcon.class;  
	        }
	        return Object.class; // caso default che non si verifica mai se strutturo bene lo switch
	    }
	    
	    /**Metodo che mi permette di rendere editabili soltanto alcune celle. */
	    public boolean isCellEditable(int row, int col) 
	    {
	        return col ==3;   // in questo caso rendo editabile solo la colonna 3 infatti ritorno true quando column=3
	    }
	}
}
Salve a tutti. Posto qui il codice che ho e la mia domanda: Come mai la cella 3 contenente il "checkbox" non riesco a farla diventare editabile?
Ho seguito l'esempio fatto da andbin (http://forum.html.it/forum/showthrea...ghlight=Jtable) ma non riesco a capire dove abbia toppato.