dopo vari tentativi risolto
grazie a tutti posto la soluzione e magari se qualcuno ha un modo migliore o anche più elegante di procedere sono ben accetti consigli, invece se qualcuno ha lo stesso problema si può aiutare da qui:

codice:
 private class MostraSoluzioniAction implements ActionListener {
        
        @Override
        public void actionPerformed(ActionEvent e) {
            BasicArrowButton arrow=(BasicArrowButton)e.getSource();
            
            if(arrow.equals(rightPanl.destraArrow)){
// avanziamo
               if(sinistraChiamato){nSolIndex++;}
                if(nSolIndex<sol.size()){
                    System.out.println(" mostrata destra "+nSolIndex);
                    visualizzaSoluzione(sol.get(nSolIndex));
                    nSolIndex++;
                    detstraChiamato=true;
                    sinistraChiamato=false;
                    
                }

            }else{ 
//arretriamo essendo un inner class solo io la uso e o destra o è sinistra

                if(detstraChiamato){nSolIndex--;}
                if(!sol.isEmpty() && nSolIndex>0){
                    nSolIndex--;
                    System.out.println("mostrata sinistra "+nSolIndex);
                    visualizzaSoluzione(sol.get(nSolIndex));
                    sinistraChiamato=true;
                    detstraChiamato=false;
                    
                } 
            }
        }
      }
ovviamente alcune variabili non sono inizializate qui ma come vedete ho messo due boolean che sono inizializati nel costruttore a falso mi danno un doppio avanzamento o arretramento
se vengono chiamati i metodi!