Por su
referencia, siempre que vayas a modificar un componente dinámicamente en tiempo de ejecución ten su referencia a mano. Java funciona así, por referencia. Una referencia no es una copia del objeto, es como un puntero, es el objeto en si, todo lo que hagas con la referencia se refleja en el objeto.
Ejemplo :
MiObjeto referencia=new MiObjeto();
MiObjeto otraReferencia = referencia;
MiObjeto nuevaReferencia = otraReferencia;
nuevaReferencia.metodo(1); // sigue siendo "referencia" (el que instanciamos al principio)
Para no perder la referencia podemos ayudarnos de clases estáticas o pasar la referencia por parámetro a un método como por ejemplo un constructor, etc... También podemos obtener la referencia por medio de funciones como
getComponents() pero es una forma engorrosa y poco eficiente en términos de rendimiento.
https://docs.oracle.com/javase/8/docs/api/java/awt/Container.html#getComponents--http://www.java2s.com/Code/Java/Swing-JFC/GettingtheChildComponentsofaContainer.htmPD La referencia se mantiene viva mientras el ámbito donde fuera asignada no sea destruido. Si declaramos una variable en un ámbito local que toma la referencia de un objeto, dicha referencia podrá usarse dentro del ciclo de vida de esa variable.