2013-04-13 29 views
0

我有一個創建ImageView的方法,名爲createImageView(),它使用EventHanlders調用各種事件。我希望能夠在這個方法中使用局部變量。我通常做的是分配最終變量以在句柄(Event)方法中使用。使用局部變量的JavaFX事件

在該方法如下所述,當我去使用最終得到以下的錯誤:

最終局部變量inity這不能被分配,因爲它是在一個封閉的類型定義
最終本地可變inity這不能被分配,因爲它是在一個封閉的型
最終局部變量dragAnchor不能分配定義,因爲它是在一個封閉的型

當然定義,除去最後給出我這個消息:

不能引用非最終變量INITX在不同的方法

所以我有什麼做的,使這種方法的工作定義的內部類裏面?

private ImageView createImageView() { 
    double initX; 
    double initY; 
    Point2D dragAnchor; 

    imgView.setOnMousePressed(new EventHandler <MouseEvent>() { 
     public void handle(MouseEvent me) { 
      //when mouse is pressed, store initial position 
      initX = imgView.getTranslateX(); 
      initY = imgView.getTranslateY(); 
      dragAnchor = new Point2D(me.getSceneX(), me.getSceneY()); 
      me.consume(); 
     } 
    }); 

    imgView.setOnMouseDragged(new EventHandler <MouseEvent>() { 
     public void handle(MouseEvent me) { 
      double dragX = me.getSceneX() - dragAnchor.getX(); 
      double dragY = me.getSceneY() - dragAnchor.getY(); 

      double newXPosition = initX + dragX; 
      double newYPosition = initY + dragY; 
      imgView.setTranslateX(newXPosition); 
      imgView.setTranslateY(newYPosition); 
      me.consume(); 
     } 
    }); 

    imgView.setOnMouseEntered(new EventHandler <MouseEvent>() { 
     public void handle(MouseEvent event) { 
      imgView.setEffect(new Glow(0.5)); 
      event.consume(); 
     } 
    }); 

    imgView.setOnMouseExited(new EventHandler <MouseEvent>() { 
     public void handle(MouseEvent event) { 
      imgView.setEffect(new Glow(0.0)); 
      event.consume(); 
     } 
    }); 
    return imgView; 
} 

回答

1

使用JavaFX屬性代替原始類型。

例如:

final DoubleProperty initX = new SimpleDoubleProperty(); 
final ObjectProperty<Point2D> dragAnchor = new SimpleObjectProperty<>(); 
... 
// in event handler 
initX.set(
    imageView.getTranslateX() 
); 
dragAnchor.set(
    new Point2D(
    me.getSceneX(), 
    me.getSceneY() 
) 
); 
+0

感謝jewelsea。這對於雙打非常適用,但dragAnchor仍然給我帶來了同樣的問題。沒有biggie,我的解決方案似乎現在工作。 – Matt

+1

已更新的示例顯示如何爲'dragAnchor'使用'ObjectProperty'。 – jewelsea

+0

我有很多東西要學習...再次感謝。 – Matt

0

我刪除了3個局部變量,並將它們設置爲類變量並且它工作。如果有人不介意提供一個快速解釋,爲什麼我會感激。