2011-07-29 13 views
3

私は小さなGUIプログラムを書いています。マウスのダブルクリックを認識したいということ以外はすべて動作します。しかし、ボタンをクリックしてリストからコードを選択することはできますが、マウスクリックを認識することはできません。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対、java.awt.eventでからのMouseEventをインポートし、エラーメッセージは十分にクリアです - MainFrameの値のマウスはありません - だから、どこですか?助けて!

答えて

6

多分そのように?

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 
    } 
} 

ところで、SimpleGUIApplicationMouseClickedイベントが、それは、ダブルクリックした場合2をする必要があります属性clicksを、持っている

+0

はい、動作します - ありがとう! –

+2

はい、それは動作します - ありがとう! 要約: 'mouse'はComponentで定義されています。 PanelはComponentの一種であるため、Panel内でマウスクリックが認識されます。 MainFrameはComponentのサブクラスではなく(Frameでもありません)、マウスクリックをMainFrameで直接認識することはできません。パネルを含む必要があります。 ListViewがコンポーネントであるため、 "Case MouseClicked(' myListView') "が不正である理由はまだ分かりませんが、おそらくListView要素をダブルクリックして今すぐ動作させることができます。 –

1

推奨されていません。好奇心が強い場合は、元のソースにjava.awt.event.MouseEventを見てください。