Usa i tag code, così il codice è più leggibile:
codice:
public class GuiScontrino extends JFrame implements ActionListener{
   private JScrollPane sp1;
   private JTable table;
   private JPanel center;
   public GuiScontrino(){ ......}

   public void actionPerformed(ActionEvent e){
       System.out.println("primoaction");
       ArrayList<Pietanza> perTable=new ArrayList<Pietanza>(GuiInizio.mpartenza.piet.values());
       String nomeColonne[]={" ", "Codice", "Quantità", "Descrizione", "Costo unitario", "Totale"};
       int numRighe=GuiInizio.mpartenza.piet.size(); //numero pietanze=numero righe
       int numColonne=6; //numero colonne
       Object[][] dati = new Object[numRighe][numColonne]; 
       int i=0;
       int j=0; 
       Object bottone=e.getSource();
       if(bottone==primi)
       {
          for(Pietanza c:perTable){
             if(c.getCategoria().toString().equalsIgnoreCase("PRIMI"))
             {
                dati [i][j+1]=c.getCodice();
                dati [i][j+3]=c.getDescrizione();
                dati [i][j+4]=c.getCosto();
                i++;
             }
          }
       }
       else if(bottone==secondi)
       {
          for(Pietanza c:perTable){
             if(c.getCategoria().toString().equalsIgnoreCase("SECONDI"))
             {
                dati [i][j+1]=c.getCodice();
                dati [i][j+3]=c.getDescrizione();
                dati [i][j+4]=c.getCosto();
                i++;
             }
       }
ecc...ecc...

table = new JTable(dati,nomeColonne);
sp1=new JScrollPane(table);
center=new JPanel();
center.add(sp1);
this.add(center,BorderLayout.CENTER);
this.validate();
}
E' difficile capire qual è il problema, visto che non hai postato tutto il codice, ma posso azzardare un'ipotesi:
penso che il problema sia dato dal fatto che non vai a modificare j nei codice.. usi la stessa j sia nei primi che nei secondi...