2015-02-22 6 views
8

В настоящее время я пытаюсь закодировать тральщик с помощью scala, но я не могу найти способ прослушать щелчок правой кнопкой мыши.Щелкните правой кнопкой мыши на кнопке/Scala

Я уже искал в Интернете способ сделать это, но я определенно не смог его найти.

Если кто-то может мне помочь, я был бы очень благодарен :)

Спасибо,

Schnipp

(Примечание: Scala новый язык для меня, и я не пользователь Java , поэтому я прошу прощения, если мои вопросы звучат немым)

EDIT:

Я пытаюсь найти (или реализация) функции «ButtonClickedRight», который мог бы перечислить en, чтобы щелкнуть правой кнопкой мыши по кнопке.

как этот

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

object Right extends MainFrame with App { 
    title = "" 
    visible = true 

    val b = new button("") 
    listenTo(b) 
    reactions += { 
     case ButtonClicked(`b`) => *code* 
     case ButtonClickedRight(`b`) => *code* 
    } 
} 

EDIT 2 -

Я хотел бы знать, если пользователь нажал на кнопку "1" или нет. Проблема заключается в том, что этот код печатает «Мышь нажата на« + e.point + »типа« + e.modifiers, когда я нажимаю на метку, но не на кнопке.

object App extends SimpleSwingApplication { 
    lazy val ui = new GridPanel(2,1) { 
    contents += new Button("1") 
    contents += new Label("2") 
    listenTo(mouse.clicks) 
    reactions += { 
     case e: MouseClicked => 
     println("Mouse clicked at " + e.point+" type "+e.modifiers) 
    } 
    } 
    def top = new MainFrame { 
    contents = ui 
    visible = true 
    preferredSize = new Dimension(500,500) 
    } 
} 
+1

Какой графический инструментарий/библиотека вы используете? Предполагая Swing, ваш google-fu слаб: http://stackoverflow.com/questions/6877117/how-do-i-recognize-mouse-clicks-in-scala и http://stackoverflow.com/questions/3700730/ scala-mouseevent-how-to-know-which-button-was-press –

+0

Спасибо, что ответили. Я видел эти два вопроса перед публикацией, но я не могу понять, как это работает. Мне жаль, что мой вопрос не был достаточно ясным (я действительно использую свинг). Я отредактировал вопрос. – Schnipp

+0

Итак, что работает или не работает? Какую ошибку вы получаете? Что происходит и что вы ожидали? –

ответ

0

Я думаю, что вы на правильном пути, для моего понимания SCALA качелей Я думаю, что проблема в том, что вы не прикрепление слушателя правильно. Для одного я бы назначить кнопку на значение и вызвать listenTo только на нем:

val button = new Button("1") 
listenTo(button) 

Тогда, в реакциях, я хотел бы написать шаблон проверки в том случае, если оно исходит от кнопки (возможно, избыточной, если вам вызывать только listenTo проходящее кнопку), и что он имеет правильную кнопку:

case ButtonClicked(b) if b == button && b.peer.getButton == MouseEvent.BUTTON_2 => ... 

Таким образом, код, предоставленные Вами редактировать бы стать:

object App extends SimpleSwingApplication { 
    lazy val ui = new GridPanel(2,1) { 
    val button = new Button("1") 
    contents += button 
    contents += new Label("2") 
    listenTo(button) 
    reactions += { 
     case evt @ MouseClicked(b, pt, _, _, _) if b == button && evt.peer.getButton == java.awt.event.MouseEvent.BUTTON2 => 
     println(s"Mouse clicked at (${pt.x}; ${pt.y}) - button: ${evt.peer.getButton}") 
    } 
    } 
    def top = new MainFrame { 
    contents = ui 
    visible = true 
    preferredSize = new Dimension(500,500) 
    } 
} 
+0

Я бы хотел наградить эту награду, но мне нужен код для компиляции в Scala (желательно 2.11). Я получаю следующие ошибки: 'object MouseEvent не является членом пакета scala.swing.event Примечание: класс MouseEvent существует, но у него нет сопутствующего объекта. Значение getButton не является членом javax.swing.AbstractButton' –

+0

Причина в том, что 'MouseEvent', о котором я говорю, относится к' java.awt'. Я обновил свой пример кода, пожалуйста, дайте мне знать, если это не компилируется. –

+0

thanks - still get 'value getButton не является членом javax.swing.AbstractButton' –

2

Но тонные события запускаются через определенный издатель .mouse.clicks.

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

object App extends SimpleSwingApplication { 
    lazy val ui = new GridPanel(2,1) { 
    val button = new Button("1") 
    contents += button 
    contents += new Label("2") 
    listenTo(button.mouse.clicks) // ! 
    reactions += { 
     case evt @ MouseClicked(`button`, pt, _, _, _) => 
     val which = evt.peer.getButton 
     if (which > 1) { 
      println(s"Mouse clicked at (${pt.x}; ${pt.y}) - button: $which") 
     } 
    } 
    } 
    lazy val top = new MainFrame { 
    contents = ui 
    size = new Dimension(500,500) 
    } 
} 

Обратите внимание, что по крайней мере на Linux моя правая кнопка имеет номер 3 не 2. Вы также можете использовать triggersPopup флаг, но тогда вы должны обеспечить, чтобы контролировать как MousePressed и MouseReleased, так как этот флаг зависит от платформы.

Смежные вопросы