Pregunta

¿Hay alguna forma para mí de pasar variables en un ActionListener sin llamarlos como definitiva? Me gustaría utilizar estos dos puntos dentro de algún tipo de forma sincronizada ... Probé Thread.sleep () pero por alguna razón que no encaja bien con el resto del programa. Este es el formato de verdad me gustaría usar, pero soy consciente de que podría ser imposible de hacer que funcione. Estoy abierto a cualquier y todos los consejos. Gracias!

(Lo siento si esto es una pregunta estúpida, he buscado una respuesta, pero parece que no puede encontrar uno.)

public void timedMain(Point current, Point wanted){
          ActionListener taskPerformer = new ActionListener(){
              public void actionPerformed(ActionEvent evt){
                  System.out.println(wanted+" "+current);}};
                  actiontimer = new Timer(delay, taskPerformer);
                  actiontimer.start();}
¿Fue útil?

Solución

Se podría hacer esto, lo que evita declarar los parámetros como definitiva.

public void timedMain(Point current, Point wanted) {
      final Point c = current;
      final Point w = wanted;
      ActionListener taskPerformer = new ActionListener(){
          public void actionPerformed(ActionEvent evt){
              System.out.println(w + " " + c);}};
              actiontimer = new Timer(delay, taskPerformer);
              actiontimer.start();}

O usted podría cambiar los tipos de current y wanted para que fueran titulares Point mutables, y tienen el aspecto método actionPerformed a los valores actuales de los titulares.

Pero no hay manera de declarar la clase interna para que pueda ver los cambios realizados en una variable en un ámbito de método que encierra ... si eso es lo que está tratando de hacer.

Otros consejos

Se podría hacer algunas cosas

  • se podría promover la acción oyente anónimo a un (private static) clase interna, y pase los argumentos al constructor

  • se podría definir una función que construye un oyente de action anónima, en lugar de en línea en su código, y hacer que los parámetros a la función final

¿Qué hay de malo con sólo marcándolos 'final', aunque?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top