questa è la classe che e stavo provando per capire come procede:
codice:
import java.awt.Frame;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Vector;

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


public class Table {
    public JTable tabella;
    public JScrollPane scroll;
    public JFrame finestra;
     
    DefaultTableModel model = new DefaultTableModel();
    
    
    
 	public  Table(){
 		
 	       
 		tabella = new JTable (model);
 	        
 	        
 		model.addColumn("nome");
 		model.addColumn("cognome");
 		model.addColumn("telefono");
 		model.addColumn("mail");
 	        
 	    
 		
 	        
 		

 		scroll=new JScrollPane(tabella);
 		
 		finestra = new JFrame ();
 		
 		finestra.add(scroll);
 		finestra.setVisible(true);
 		finestra.setBounds(50, 50, 300, 300);
 	    
 	     
 	     
 	   tabella.getModel().addTableModelListener(new MyTableModel(tabella, this));
 	   
 	   
 	   
 	   //valori di prova
 	  Vector<String> row = new Vector<String>();
		row.addElement("luca");
		row.addElement("matta");
		row.addElement("35345325");
		row.addElement("luca@info.it");
		model.addRow(row);
		
 	   String vettore = model.getDataVector().toString();
 	   System.out.println(vettore);
 	}
 	  
 	    
    public static void main(String[] args) {
 Table a = new Table();
    }

}
questo il table model :
codice:
import java.awt.Color;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Vector;

import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;

public class MyTableModel implements TableModelListener{

		  JTable table;
		  Table prova;
		  
		  MyTableModel(JTable table,Table prova) {
		    this.table = table;
		    this.prova=prova;
		    table.setRowSelectionAllowed(false);
		    table.setColumnSelectionAllowed(false);
		    table.setCellSelectionEnabled(false);
		    
			  
		    
		    
		  }

		  public void tableChanged(TableModelEvent e) {
		    int firstRow = e.getFirstRow();
		    int lastRow = e.getLastRow();
		    int index = e.getColumn();

		    switch (e.getType()) {
		    case TableModelEvent.INSERT:
		      for (int i = firstRow; i <= lastRow; i++) {
		        System.out.println("inserito");
		        
		      }
		      break;
		    case TableModelEvent.UPDATE:
		      if (firstRow == TableModelEvent.HEADER_ROW) {
		        if (index == TableModelEvent.ALL_COLUMNS) {
		          System.out.println("A column was added");
		        } else {
		        	System.out.println("aggiornata");
		        	System.out.println(index + "in header changed");
		        }
		      } 
		      
		      else {
		        for (int i = firstRow; i <= lastRow; i++) {
		          if (index == TableModelEvent.ALL_COLUMNS) {
		            System.out.println("All columns have changed");
		        	  break;
		          } else {
		            System.out.println(index);
		            System.out.println(table.getSelectedRow() + table.getSelectedColumn());

		            Vector num = prova.model.getDataVector();
		            System.out.println(num);
		            
		        			    try {
						
				           Connection conn = DriverManager.getConnection("jdbc:sqlite:agenda.db");
				           
				         PreparedStatement prep = conn.prepareStatement("INSERT INTO agenda(data) VALUES(?);");
				          
				         prep.setString(1,num.toString());
				
				prep.execute();
				
						} catch (SQLException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						} 
		          }
		        }
		      }
		      
		      break;
		    case TableModelEvent.DELETE:
		      for (int i = firstRow; i <= lastRow; i++) {
		        System.out.println("delete");
		      }
		      break;
		    }
		  }
		  
		  
		  
		}
non ho capito la seconda domanda