将变量传递到Java ActionListener?
有没有一种方法可以让我将变量传递给actionlistener,而不将它们作为final调用?我想把这两点用在某种定时方式中。。。我尝试了Thread.sleep(),但由于某些原因,它与程序的其余部分不匹配。这是我非常想使用的格式,但我知道它可能无法正常工作。 我愿意接受任何建议。谢谢 (如果这是一个愚蠢的问题,我很抱歉,我一直在寻找答案,但似乎找不到答案。)将变量传递到Java ActionListener?,java,applet,actionlistener,Java,Applet,Actionlistener,有没有一种方法可以让我将变量传递给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();}