私は scala-swing で遊ぶ scala 初心者です。scala.swing.Point
そして、与えられたを翻訳したいscala.swing.event.MousEvent
:
図形の選択を処理するクラスにマウス イベントを送信したいと考えています。しかし、シェイプにはコンテナー (シート) に対する相対位置がありますが、MouseEvent.point はウィンドウに対する相対位置であるため、前にそれを変換/相対化する必要があります。
だから、私はsSelection
を受け取るクラスを持っていますMouseEvent
:
case class Selection(sheet:Sheet) {
def on(event:Event) = event match {
case clicked:MouseClicked => {
clicked.modifiers match {
case scala.swing.event.Key.Modifier.Control =>
sheet.getItemAt(clicked.point).map(addToSelection)
case _ =>
sheet.getItemAt(clicked.point).map(setSelection)
}
}
}
}
そして、Sheet
誰がシェイプ コンテナを持っているか (そして、ポイントを変換する方法を知っています)。
class Sheet extends Component {
private val selection = Selection(this)
listenTo(mouse.clicks, mouse.moves)
reactions += {
case e:MousePressed => selection.on(translate(e))
case e:MouseClicked => selection.on(translate(e))
}
/** Here is my problem :
* > Expression of type (MouseEvent) => MousePressed doesn't conform to expected type Event
*/
def translate(original: MouseEvent): Event = original match {
case pressed:MousePressed =>
pressed.copy(point=relativize(pressed.point))
case clicked:MouseClicked =>
clicked.copy(point=relativize(pressed.point))
case other:MouseEvent=>
other
}
}
私は醜いキャストでこの問題を回避することができます:
case pressed:MousePressed =>
pressed.copy(point=relativize(pressed.point)).asInstanceOf[MousePressed]
しかし、私は別のより奇妙なコンパイラの問題を抱えています:
エラー:(32, 21) クラス MousePressed のメソッド copy の引数がありません。部分的に適用された関数として扱いたい場合は、このメソッドの後に `_' を付けます
Pressed.copy(point = relativize(pressed.point)).asInstanceOf[MousePressed]
そしてここで、私は道に迷っており、この簡単な変換を行うためにあなたの助けが必要です.
もちろん、すべてのメソッドはscala.swing._
型を使用します (そして、scala.swing. and
java.awt. ` の間で混合することはありません) 。
どうもありがとう