In che senso? Nel costruttore del listener mi chiamo il JButton e fin qui non è un problema
Nel costruttore del listener tu non chiami nessuno JButton ma ti arriva l'iconea associato al JButton
L'errore sta in questo punto
codice:
 for(int j=1;j<=posti;j++){
                ....
                bPosto=new JButton(libero);
                ....
            }
Cioè bPosto conterrà l'ultimo jbutton che crei, quindi quando poi verrà scatenato il listener e tu invochi "bPosto.setIcon" lo invochi appunto sull'ultimo bottone creato.
Ovviamente il bottone lo puoi passare al costruttore del listener:
codice:
class Seleziona implements ActionListener{
        private char f;
        private int p;
        private Icon disp;
        private JButton button;
        public Seleziona(char f,int p,JButton button,Icon disp){
            this.f=f;
            this.p=p;
            this.disp=disp;
            this.button = button;
        }
        public void actionPerformed(ActionEvent e){
                    if(disp==libero)
                        button.setIcon(selezionato);
                    if(disp==selezionato)
                        button.setIcon(occupato);
        }
}
		//PASSAGGIO DEL VALORE NEL FORM
		 ActionListener listSelezione=new Seleziona(i,j,bPosto,bPosto.getIcon());
Inoltre volendo a questo punto potresti anche omettere di passare l'iconea che cmq ti potresti recuperare dal button passato.