Scusa il ritardo, ma lavorando non ho moltissimo tempo per guardare il forum (anche se sembro sempre collegato ).
Allora... per gestire il tutto su Listener esterni differenti è sufficiente che tu tu crei una classe per ciascun listener (e immagino che tu l'abbia già fatto), e che tu passi al costruttore di questi listener gli oggetti di cui hai bisogno (quindi l'ArrayList e la JList). A questo punto, dentro ai listener li gestisci come se fossero locali al listener stesso.

Da quel che vedo, però, tu vuoi gestire la cosa dal Listener associato al JList, quindi quest'ultimo oggetto lo puoi tranquillamente ricavare dall'evento ListSelectionEvent:
codice:
JList lst = (JList) e.getSource();
Per quanto riguarda il ClassCastException dipende da come hai gestito la cosa. Se il ListCellRenderer che hai usato è quello di default (non l'hai modificato), allora il metodo getSelectedObject() ti restituisce una stringa... dunque basta modificare il cast:
codice:
String app = (String) c1.getSelectedValue();
Se invece hai utilizzato un Renderer diverso, allora potrai gestirtelo a mano, in base alle tue impostazioni.


Ciao.