Как распознавать щелчки мыши в Scala?

Я пишу небольшую программу с графическим интерфейсом. Все работает, за исключением того, что я хочу распознавать двойные щелчки мыши. Однако я вообще не могу распознавать щелчки мыши (как таковые), хотя я могу нажимать кнопки и выбирать код из списка.

Следующий код адаптирован из «Пакета scala.swing» Инго Майера:

import scala.swing._
import scala.swing.event._

object MouseTest extends SimpleGUIApplication {
  def top = new MainFrame {
    listenTo(this.mouse) // value mouse is not a member of scala.swing.MainFrame
    reactions += {
      case e: MouseClicked =>
        println("Mouse clicked at " + e.point)
    }
  }
}

Я пробовал несколько вариантов: мышь против мыши, SimpleSwingApplication, импорт MouseEvent из java.awt.event и т. д. Сообщение об ошибке достаточно ясное — нет значения мыши в MainFrame — так где же оно тогда? Помощь!


person David Matuszek    schedule 29.07.2011    source источник


Ответы (2)


Может так?

object App extends SimpleSwingApplication {
  lazy val ui = new Panel {
    listenTo(mouse.clicks)
    reactions += {
      case e: MouseClicked =>
        println("Mouse clicked at " + e.point)
    }
  }
  def top = new MainFrame {
    contents = ui
  }
}

Кстати, SimpleGUIApplication устарел

person om-nom-nom    schedule 29.07.2011
comment
Да, это работает - спасибо! Подводя итог: «мышь» определена в компоненте. Панель — это своего рода компонент, поэтому щелчки мышью могут быть распознаны в панели. MainFrame не является подклассом Component (как и Frame), поэтому щелчки мыши не могут быть распознаны непосредственно в MainFrame; он должен содержать панель. Мне до сих пор не ясно, почему case MouseClicked(myListView) является незаконным, поскольку ListView является компонентом, но, вероятно, теперь я могу заставить работать двойной щелчок по элементу ListView. - person David Matuszek; 30.07.2011

Событие MouseClicked имеет атрибут clicks, который должен быть 2, если это был двойной щелчок. Взгляните на java.awt.event.MouseEvent. для первоисточника, если вам интересно.

person Alex Cruise    schedule 29.07.2011