Question

Yat-il un moyen pour moi de passer des variables dans un ActionListener sans les appeler comme définitive? Je voudrais utiliser ces deux points à l'intérieur une sorte de passage chronométré ... J'ai essayé Thread.sleep () mais pour une raison quelconque, il ne cadre pas bien avec le reste du programme. C'est le format que je voudrais vraiment utiliser, mais je suis conscient qu'il pourrait être impossible de le faire fonctionner. Je suis ouvert à tout et tous les conseils. Merci!

(Je suis désolé si cela est une question stupide, j'ai cherché une réponse mais ne peux pas trouver un.)

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();}
Était-ce utile?

La solution

Vous pouvez le faire, ce qui évite de déclarer les paramètres comme final.

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();}

Ou vous pouvez changer les types de current et wanted afin qu'ils étaient porteurs de mutables Point, et ont l'aspect de la méthode de actionPerformed aux valeurs actuelles dans les supports.

Mais il n'y a aucun moyen de déclarer la classe interne afin qu'il puisse voir les modifications apportées à une variable dans un champ de méthode englobante ... si c'est ce que vous essayez de faire.

Autres conseils

Vous pouvez faire quelques petites choses

  • vous pouvez promouvoir l'auditeur d'action anonyme à un (statique privé) classe interne, et de transmettre les arguments au constructeur

  • vous pouvez définir une fonction qui a construit un écouteur d'action anonyme, plutôt que inline dans votre code, et faire les paramètres à cette dernière fonction

Qu'est-ce qui ne va pas avec juste les marquant « finale », bien?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top