将变量传递到Java ActionListener?

将变量传递到Java ActionListener?,java,applet,actionlistener,Java,Applet,Actionlistener,有没有一种方法可以让我将变量传递给actionlistener,而不将它们作为final调用?我想把这两点用在某种定时方式中。。。我尝试了Thread.sleep(),但由于某些原因,它与程序的其余部分不匹配。这是我非常想使用的格式,但我知道它可能无法正常工作。 我愿意接受任何建议。谢谢 (如果这是一个愚蠢的问题,我很抱歉,我一直在寻找答案,但似乎找不到答案。) 你可以做一些事情 您可以将匿名操作侦听器升级为(私有静态)内部类,并将参数传递给构造函数 您可以定义一个构建匿名操作侦听器的函数,而

有没有一种方法可以让我将变量传递给actionlistener,而不将它们作为final调用?我想把这两点用在某种定时方式中。。。我尝试了Thread.sleep(),但由于某些原因,它与程序的其余部分不匹配。这是我非常想使用的格式,但我知道它可能无法正常工作。 我愿意接受任何建议。谢谢

(如果这是一个愚蠢的问题,我很抱歉,我一直在寻找答案,但似乎找不到答案。)


你可以做一些事情

  • 您可以将匿名操作侦听器升级为(私有静态)内部类,并将参数传递给构造函数

  • 您可以定义一个构建匿名操作侦听器的函数,而不是在代码中内联它,并将该函数的参数设置为最终参数


但是,只将它们标记为“final”有什么错?

您可以这样做,这样可以避免将参数声明为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();}
或者您可以更改
当前
想要的
的类型,使它们是可变的
持有者,并让
操作执行
方法查看持有者中的当前值


但是没有办法声明内部类,以便它可以看到对封闭方法范围内的变量所做的更改。。。如果这正是您想要做的。

感谢您的及时回复。。。我还没有研究过匿名动作侦听器,我现在正在查找。您的“taskPerformer”是一个匿名动作侦听器。也就是说,当您转到“new ActionListner(){…}”时,定义了ActionListner的一个新子类,并且该子类没有(源代码)名称。对于我打算使用此代码段的目的,这似乎很好。谢谢你及时的回复,你是个救星。
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();}