gpt4 book ai didi

java - 从内部类引用的局部变量

转载 作者:行者123 更新时间:2023-12-01 10:15:31 24 4
gpt4 key购买 nike

我最近一直在玩 JavaFX,我刚刚弄清楚如何使用 MouseEvent,我想制作一个程序,当您单击时,它会捕获您的 XY 并在该位置创建一个圆圈。

当我尝试此操作时,我收到错误从内部类引用的局部变量。我打算使用 lambda,但我不知道如何使用。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.event.EventHandler;
import javafx.scene.input.MouseEvent;
import javafx.scene.shape.Circle;
public class circle extends Application{
Scene scene;
VBox v;
public void start(Stage stage){
double x = 0;
double y = 0;
v = new VBox(10);
scene = new Scene(v, 300, 300);
scene.setOnMousePressed(new EventHandler<MouseEvent>(){
public void handle(MouseEvent e)
{
x = e.getX();
y = e.getY();
}
});
Circle circle = new Circle();
circle.setCenterX(x);
circle.setCenterY(y);
v.getChildren().add(circle);
stage.setScene(scene);
stage.show();
}
}

最佳答案

即使你的代码编译了,它也不会更新圆圈的位置。您只需在 x=0y=0 时设置圆的 centerXcenterY 一次>。如果您被允许访问内部类中的(非最终、非有效最终)局部变量,您所要做的就是更新 xy ,而不是圆的 centerXcenterY 属性。

你只需要

public void start(Stage stage){
v = new VBox(10);
scene = new Scene(v, 300, 300);
Circle circle = new Circle();
v.getChildren().add(circle);
scene.setOnMousePressed(new EventHandler<MouseEvent>(){
public void handle(MouseEvent e)
{
circle.setCenterX(e.getX());
circle.setCenterY(e.getY());
}
});
stage.setScene(scene);
stage.show();
}

lambda 表达式版本如下所示

public void start(Stage stage){
v = new VBox(10);
scene = new Scene(v, 300, 300);
Circle circle = new Circle();
v.getChildren().add(circle);
scene.setOnMousePressed(e -> {
circle.setCenterX(e.getX());
circle.setCenterY(e.getY());
});
stage.setScene(scene);
stage.show();
}

在 Java8 之前的 Java 版本中,您需要将 circle 声明为 Final,您可以轻松执行此操作:

final Circle circle = new Circle();

关于java - 从内部类引用的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35924953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com