我想在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;
答案 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()
}