Java - Comunicar clase con JButton

 
Vista:

Comunicar clase con JButton

Publicado por Jordi (135 intervenciones) el 02/08/2017 19:45:40
Hola gente,
hace un par o tres de meses ya me surgió este mismo problema y no supe solucionarlo.
Pese a todo, como no era de alta prioridad terminar mi programa lo dejé a medias y al final ha quedado casi en el olvido.
Pero ahora, haciendo un programa totalmente distinto me ha aparecido ese puñetero problema otra vez y no hay manera de que se me ocurra por donde tomarlo, os cuento:
Tengo una lista de botones que cada uno de ellos debe abrir un archivo en específico. Estos botones aparecen mediante una pequeña función que busca todos los archivos de una carpeta y crea los botones ya dichos. Tengo hecha la parte que hace aparecer los botones con el nombre del archivo que corresponden, pero hay algo que no logro hacer. Es hacer que el programa sepa que archivo abrir cuando un botón se ha pulsado. He hecho el siguiente código pero no me funciona y no se me ocurre absolutamente nada para continuar :(
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//Un montón de código...
JButton[] botones = obtenerBotones();
String[] rutas = obtenerRutas();
 
for(int i = 0; i < botones.lenght; i++){
	botones[i].addActionListener(new ActionListener(){
 
		@Override
		public void actionPerformed(ActionEvent arg0) {
		abrirArchivo(rutas[i]);
 
		}
	}
}
//Otro montón de código...
Osea, que no encuentro la manera de transferir una información desde una clase que los tiene almacenados a la otra cuando se dispara el evento ya que me salta un error de compilación diciendo que la "i" tiene que ser final. ¿Alguna sugerencia? ¿Que se me está escapando? He pensado en hacer que sean los botones quienes almacenan la información de la ruta a abrir, pero no se me ocurre tampoco como transferir esa información a la clase de superioridad jerárquica cuando se dispara el actionPerformed.
No hace falta que me dejeis un código del copón con el problema resuelto al 100%, sólo necesitaría que me dijerais como estructurar el programa para que no me pasen estas cosas o si hay alguna sentencia que sea necesaria para esto que desconozca.
Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Comunicar clase con JButton

Publicado por Tom (1629 intervenciones) el 03/08/2017 10:49:16
A ojo, sin chequear nada:

1
2
3
4
5
6
7
8
for(int i =0; i < botones.length; i++) {
    botones[i].setActionCommand(rutas[i]);
    botones[i].addActionListener(new ActionListener() {
      public void actionperformed(ActionEvent ev) {
        abrirArchivo(ev.getActionCommand();
      }
    }
  }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Comunicar clase con JButton

Publicado por Tom (1629 intervenciones) el 03/08/2017 11:06:32
Ah! y por supuesto, mucho mejor que hagas un único listener para todos los botones.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Comunicar clase con JButton

Publicado por Jordi (135 intervenciones) el 03/08/2017 12:28:56
Tío, no te imaginas lo que me has ayudado y el peso que me has sacado de encima. Muchas gracias!
Por cierto, para que esto no me pase otra vez en el futuro por desconocer un método de una clase, me recomiendas que me lea todo lo que pueden hacer las clases del api y sus posibilidades antes de empezar a programar o ir buscando por internet según mis necessidades?
Está claro que no habría perdido las decenas de horas que he perdido si me hubiera leído los métodos que jbutton tiene disponibles, pero también es cierto que si hiciera eso para todas las clases que uso me pasaría el día entero leyendo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Comunicar clase con JButton

Publicado por Tom (1629 intervenciones) el 03/08/2017 14:25:19
Pues lo iba a añadir a mi comentario ... sí, hay que leerse el API siempre que se tenga ocasión. Solamente tendrás que dedicarle tanto tiempo al principio, después te sonarán ya las cosas y las encontrarás más rápidamente.

Pero lo que sí deberías leer inexcusablemente (tú y cualquiera) son los tutoriales de swing. Generalmente contienen la mayor parte de lo que puedas necesitar.

https://docs.oracle.com/javase/tutorial/uiswing/components/button.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Comunicar clase con JButton

Publicado por Jordi (135 intervenciones) el 04/08/2017 18:14:19
Perfecto. Pues voy a mirarme los tutoríales que me has dicho y a seguir aprendiendo. Gracias :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar