Sei stato UTILISSIMO, non sò come ringraziarti; ho capito perfettamente tutto ciò che hai scritto, ed hai ragione sull'utilizzo di List... Ho solo una domanda:

perchè implementi così il main?

codice:
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new Test().setVisible(true);
            }
        });
    }
Non bastava il classico:

public static void main (String args []) {
new Test().setVisible(true);
}

?