创建一个Mouselistner到Javafx矩形

Mar*_*sen 1 java javafx mouselistener

我想在我的javafx矩形上创建一个mouselistner.

我的想法是当按下它时矩形必须改变颜色?

有谁知道如何在Javafx中为形状添加一个列表器?

到目前为止,我试过这个:

    final Rectangle rect = new Rectangle();

        rect.setOnMouseClicked(new EventHandler<MouseEvent>() {

            @Override
            public void handle(MouseEvent event) {
                // TODO Auto-generated method stub

            }
        });
Run Code Online (Sandbox Code Playgroud)

但是我得到一个错误说

对于Rectangle类型,方法setOnMouseClicked(new EventHandler(){})是未定义的

升技更多信息:

我对rect的唯一选择是:

rect.add()
rect.contains()
rect.grow();
rect.hashcode()
rect.intersection();
Run Code Online (Sandbox Code Playgroud)

还有一些不重要的.

我正在使用的导入如下:

import com.sun.glass.events.MouseEvent;
import com.sun.javafx.geom.Rectangle;
import com.sun.javafx.geom.Shape;
Run Code Online (Sandbox Code Playgroud)

Ben*_*ale 13

您的代码看起来正确,并匹配我能找到的任何示例.为了证明这一点,我把一个快速的例子拼凑在一起:

public class JavaFXApplication extends Application {

    Rectangle rect = new Rectangle(100,100);

    @Override
    public void start(Stage primaryStage) {
        rect.setFill(Color.BLUE);

        rect.setOnMouseClicked(new EventHandler<MouseEvent>()
        {
            @Override
            public void handle(MouseEvent t) {
                rect.setFill(Color.RED);
            }
        });


        StackPane root = new StackPane();
        root.getChildren().add(rect);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}
Run Code Online (Sandbox Code Playgroud)

单击矩形时,颜色从蓝色变为红色.

这可能是一个很长的镜头,但请确保您引用库中的Rectangle类型JavaFX而不是AWTRectangle,即确保您的导入是:

import javafx.scene.shape.Rectangle;
Run Code Online (Sandbox Code Playgroud)

并不是

import java.awt.Rectangle;
Run Code Online (Sandbox Code Playgroud)

更新

根据我原来的评论,看起来好像你引用了该Rectangle类型的错误导入.我不承认导入com.sun.javafx.geom.Rectangle,这是来自旧版JavaFX吗?

您还引用了错误的MouseEvent类型.

更改:

import com.sun.glass.events.MouseEvent;
Run Code Online (Sandbox Code Playgroud)

至:

import javafx.scene.input.MouseEvent;
Run Code Online (Sandbox Code Playgroud)