如何使用scalafx KeyCodeCombination.match函数?

时间:2018-06-18 17:35:53

标签: scalafx

以下是我认为可以根据我见过的javafx示例工作的内容,但是我在(ctlA.match(ke))指向“匹配”并说“标识符预期但'匹配'时收到错误找到。”任何具有复杂KeyEvent处理的scalafx示例的链接都将受到赞赏。

import scalafx.Includes._
import scalafx.application.JFXApp
import scalafx.application.JFXApp.PrimaryStage
import scalafx.scene.input.{KeyCode, KeyCombination, KeyCodeCombination, KeyEvent}
import scalafx.scene.Scene
import scalafx.stage.Stage

object Main extends JFXApp {
  val ctlA = new KeyCodeCombination(KeyCode.A, KeyCombination.ControlDown)
  stage = new PrimaryStage {
    scene = new Scene {
      onKeyPressed = { ke =>
        if (ctlA.match(ke))
          println("Matches ^A")
        else
          println("No match")
      }
    }
  }
}

1 个答案:

答案 0 :(得分:1)

这是一个古怪的问题。 ScalaFX 显然只是 JavaFX API 的包装,因此它尝试尽可能忠实地遵循该API。在这种情况下,会有一个小问题,因为match既是属于KeyCodeCombination的函数的名称,又是 Scala 关键字的为什么编译到此为止会失败: Scala 编译器认为这是match关键字,并且没有任何意义。

幸运的是,有一个简单的解决方案:只需将match括在反引号内,这样您的代码就会变成:

import scalafx.Includes._
import scalafx.application.JFXApp
import scalafx.application.JFXApp.PrimaryStage
import scalafx.scene.input.{KeyCode, KeyCombination, KeyCodeCombination, KeyEvent}
import scalafx.scene.Scene
import scalafx.stage.Stage

object Main extends JFXApp {
  val ctlA = new KeyCodeCombination(KeyCode.A, KeyCombination.ControlDown)
  stage = new PrimaryStage {
    scene = new Scene {
      onKeyPressed = { ke =>
        if (ctlA.`match`(ke))
          println("Matches ^A")
        else
          println("No match")
      }
    }
  }
}

您的程序现在可以正常运行了!