创建一个Mouselistner到Javafx矩形

时间:2012-11-13 10:48:33

标签: 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

            }
        });

但是我得到一个错误说

  

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

了解更多信息:

我对rect的唯一选择是:

rect.add()
rect.contains()
rect.grow();
rect.hashcode()
rect.intersection();

和其他一些不重要的事情。

我正在使用的导入如下:

import com.sun.glass.events.MouseEvent;
import com.sun.javafx.geom.Rectangle;
import com.sun.javafx.geom.Shape;

2 个答案:

答案 0 :(得分: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();
    }
}

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

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

import javafx.scene.shape.Rectangle;

而不是

import java.awt.Rectangle;

<强>更新

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

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

变化:

import com.sun.glass.events.MouseEvent;

要:

import javafx.scene.input.MouseEvent;

答案 1 :(得分:0)

我知道这个答案已经很老了-但作为更新(Java 13,JavaFX 13):

import javafx.scene.shape.Rectangle;
// ...
public void createRectangle() {

    Rectangle rect = new Rectanlge(200, 200);

    // On mouse click, code within here will be run.
    rect.setOnMouseClicked(mouseEvent -> {

        // Read from another property to toggle
        rect.setFill(Color.RED);

    });

    // Add to scene in start()
}
相关问题