Je suis un débutant scala qui joue avec scala-swing. Et je veux traduire un scala.swing.Point
donné :Scala; Expression de type (X) => X n'est pas conforme au type SupX
Je voudrais envoyer l'événement de la souris à une classe responsable de gérer les sélections de formes. Mais parce qu'une forme a un emplacement par rapport à son conteneur (feuille) mais MouseEvent.point est relatif à la fenêtre que je devrais traduire/relativiser auparavant.
Donc, j'ai une classe Selection
qui reçoivent MouseEvent
s:
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)
}
}
}
}
Et Sheet
qui est son conteneur de formes (et savoir comment traduire les points).
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
}
}
Je peux contourner ce problème avec un casting laid:
case pressed:MousePressed =>
pressed.copy(point=relativize(pressed.point)).asInstanceOf[MousePressed]
Mais j'ai un autre problème de compilateur plus étrange:
Error:(32, 21) missing arguments for method copy in class MousePressed; follow this method with `_' if you want to treat it as a partially applied function
pressed.copy(point = relativize(pressed.point)).asInstanceOf[MousePressed]
Et ici, je suis perdu et le besoin votre aide pour faire cette conversion simple.
Bien sûr, toutes les méthodes utilisent scala.swing._
types (et ne se mélange entre scala.swing. and
java.awt. `)
Merci beaucoup
Merci beaucoup. Et cela supprime le besoin de lancer (qui était exigé par mon Id qui avait des problèmes pour analyser cette mauvaise expression) –