尝试在ScalaFx中绑定鼠标事件侦听器时发生编译错误

佩佩木薯

我正在编写一个使用CanvasScala中的小型测试应用程序scalafx问题在于:

gui.canvas.handleEvent(MouseEvent.MouseClicked){
     a: MouseEvent => {
          println("Mouse pos:" + a.sceneX+ "  " + a.sceneY)
     }      
}

抛出错误:

[error] E:\dev\sg\src\main\scala\Test.scala:27: type mismatch;
[error]  found   : scalafx.scene.input.MouseEvent => Unit
[error]  required: _2.HandlerMagnet[javafx.scene.input.MouseEvent,?] 
where val _2: scalafx.scene.canvas.Canvas
[error]       a: MouseEvent => {
[error]                     ^

我不明白为什么这个完全相同的代码段在出现在方法setupGraphics中时会编译,而不是在Main对象代码中时才编译。

顺便说一句,浏览了很多ScalaFX代码后,我有点头晕,因为我已经看到了很多绑定事件的方法,有一种我正在使用的方法,即设置onMouseClicked变量(带有和不带有第一个类函数),使用filterEvent同样,对于每个函数,您都可以使用匿名函数或创建事件处理程序对象。

在所有这些方法中,这是在此示例中唯一起作用的方法。在这种情况下,尝试创建EventHandler[MouseEvent]和覆盖handle()也将失败。

我正在使用Scala 2.10.5

完整资料来源:

object Test {
  import scalafx.Includes._
  import scalafx.application.JFXApp
  import scalafx.application.JFXApp.PrimaryStage
  import scalafx.stage.Stage

  import scalafx.scene.Scene
  import scalafx.scene.canvas.Canvas
  import scalafx.scene.canvas.GraphicsContext

  import scalafx.scene.input.MouseEvent
  import scalafx.event.EventHandler



  class GUI(val canvas:Canvas
    ,val stage: Stage
    ,val gc: GraphicsContext){}

  object Main extends JFXApp {

    var gui=setupGraphics()

    gui.canvas.handleEvent(MouseEvent.MouseClicked){
      a: MouseEvent => {
        println("Mouse pos:" + a.sceneX+ "  " + a.sceneY)
      }
    }

    def setupGraphics():GUI={
      val canvas = new Canvas(400, 400)
      canvas.translateX=0
      canvas.translateY=0
      val gc = canvas.graphicsContext2D

      canvas.handleEvent(MouseEvent.MouseClicked){
        a: MouseEvent => {
          println("Mouse pos:" + a.sceneX+ "  " + a.sceneY)
        }
      }

      stage = new PrimaryStage {
        title = "asd"
        height = 600
        width = 800
        scene=new Scene{content=canvas}
      }

      return new GUI(canvas,stage,gc)
    }    
  }    
}
哈雷克

在我看来,这看起来像Scala编译器中的错误,尤其是您可以使用中间变量来更正此错误,canvas而无需修改其他任何内容。除了调用之外gui.canvas.handleEvent,首先分配canvas一个变量,然后handleEvent在该变量上调用

var gui=setupGraphics()
val canvas = gui.canvas
canvas.handleEvent(MouseEvent.MouseClicked){
  a: MouseEvent => {
    println("Mouse pos:" + a.sceneX+ "  " + a.sceneY)
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

包装方法引发异常时发生编译错误

在C ++ 17中使用空列表初始化构造函数时发生编译错误

当基类的虚拟方法隐藏发生时,如何强制发生编译错误?

尝试在Rust v0.13.0中打印整数时发生编译错误

尝试使用增量运算符时发生编译错误

尝试在向量中查找_if unique_ptr时发生编译错误

从Excel提取时发生编译错误

尝试从本地类方法访问属性时发生编译错误

尝试递增由initializer_list.begin()返回的迭代器时发生编译错误

仅在调用方法时发生编译错误?

尝试使用shared_ptr创建单例时发生编译错误

插入共享内存中的映射的映射时发生编译器错误

在Angular中运行ng build --prod时发生编译错误

应用带有数据绑定的主题时发生编译器错误

在C ++中定义和使用std :: map时发生编译错误

泛型中的多态性-传递继承的对象时发生编译错误(无法隐式转换类型)

Android-实施ServiceConnection时发生编译错误

尝试安装qjournalctl时发生编译错误

尝试链接<boost \ property_tree \ json_parser.hpp>时发生编译错误

尝试将node.js部署到Heroku:发生编译错误?

建立专案时发生编译错误

在Java中实现简单的泛型函数时发生编译错误?

使用boost :: lockfree :: spsc_queue时发生编译错误(boost中的错误吗?)

基本textField actionListener发生错误(命令在侦听器中时发生错误)

在Scala对象中访问子类的方法时发生编译器错误

将数组/指针传递到库中的过程时发生编译错误

在C中调用函数指针时发生编译错误

尝试为UDF返回PChar或OleVariant时发生编译错误

尝试安装WebRTCVAD模块时发生编译错误