以下是我认为可以根据我见过的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")
}
}
}
}
答案 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")
}
}
}
}
您的程序现在可以正常运行了!