Sí.
Como ha dicho el compañero, tienes un problema de "alcance" (scope).
Si declaras la tabla dentro de un método, esa tabla solo "existe" dentro de ese método.
Cuando el método haya terminado, dicha tabla "muere", deja de existir.
Tu ahora tendrás algo más o menos similar a esto:
Aquí el método imprimir() se quejará de que no sabe nada de ningún elemento llamado "tabla", porque este elemento solo existe para el método llenar().
Si queremos que un elemento cualquiera sea accesible para distintos métodos, tal y como decía el compañero, lo ideal es declararlo a "nivel de clase".
De este modo, su "alcance" es global y cualquier método podrá trabajar con él.
Para hacer esto, basta con hacer la declaracion al principio de la clase.
En este caso, como no conocemos de antemano el numero de filas que va a tener, primero hacemos la declaración y luego en otro método donde el usuario (o quien sea) nos dirá el numero de filas, podremos hacer la inicialización.
El único cuidado que hay que tener es asegurarnos de que ningún método va a intentar leer datos de la tabla ANTES de que haya sido inicializada.
Es decir, ahora mismo el método imprimir() ya tiene acceso al elemento tabla. Pero si llamamos a imprimir(), antes de llamar a llenar() que es quien se encarga de inicializar la tabla, se producirá una excepción (probablemente
NullPointerException) porque imprimir se encontrará con que tabla no está inicializada.
Así que hay que tener cuidado de que el primer método que acceda al elemento tabla, se encargue de inicializarla.
Y si fuera un caso donde ya sabemos de antemano el numero de filas que va a tener la tabla, entonces se podría hacer la inicialización al mismo tiempo que la declaracion: