簡體   English   中英

將變量傳遞給Java ActionListener?

[英]Passing variables into a Java ActionListener?

有沒有一種方法可以將變量傳遞給動作偵聽器而不將其稱為最終變量? 我想在某種定時方式中使用這兩點...我嘗試了Thread.sleep(),但是由於某種原因,它與程序的其余部分不能很好地結合在一起。 這是我真正想要使用的格式,但是我知道可能無法使其正常工作。 我願意接受任何建議。 謝謝!

(對不起,如果這是一個愚蠢的問題,我一直在尋找答案,但似乎找不到答案。)

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

您可以這樣做,避免將參數聲明為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();}

或者,您可以更改currentwanted的類型,以便它們是可變的Point持有人,並讓actionPerformed方法查看這些持有人中的當前值。

但是沒有辦法聲明內部類,以便它可以看到對方法范圍內的變量所做的更改……如果您要這樣做的話。

你可以做幾件事

  • 您可以將匿名操作偵聽器提升為(私有靜態)內部類,並將參數傳遞給構造函數

  • 您可以定義一個構建匿名動作偵聽器的函數,而不是將其內聯到代碼中,並將該函數的參數定為最終函數

但是,僅將它們標記為“最終”有什么問題?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM