簡體   English   中英

使用局部變量的JavaFX事件

[英]JavaFX Events Using Local Variables

我有一個創建ImageView的方法,稱為createImageView(),該方法使用EventHanlders調用各種事件。 我希望能夠在此方法中使用局部變量。 我通常要做的是分配最終變量以在handle(Event)方法中使用。

在下面描述的方法中,當我使用final時,出現以下錯誤:

無法分配最終的局部變量initY,因為它是在封閉類型中定義的
無法分配最終的局部變量initY,因為它是在封閉類型中定義的
無法分配最終的局部變量dragAnchor,因為它是在封閉類型中定義的

當然,刪除final會給我以下信息:

無法在以其他方法定義的內部類中引用非最終變量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;
}

使用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()
  )
);

我刪除了3個局部變量,使它們成為類變量,然后它起作用了。 如果有人不介意提供一個簡短的解釋,為什么我會很感激。

暫無
暫無

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

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