Cei*_*ish 6 swing scala keyevent
我正在尝试一些Scala gui编程(我在Scala中的第一个项目,所以我认为我从简单的开始).但我似乎陷入了一些似乎应该相对微不足道的事情.我有一个扩展scala.swing.MainFrame的类,我想检测用户在该窗口具有焦点时按键的时间.有趣的是,我似乎无法找到任何方式让事件发生.
我找到了一个例子,其他人如何解决这个问题:http://houseofmirrors.googlecode.com/svn/trunk/src/src/main/scala/HouseGui.scala但是他们似乎已经恢复使用Java了Swing API,这有点令人失望.有谁知道是否有更惯用的截取事件的方式?
这似乎适用于Scala 2.9
package fi.harjum.swing
import scala.swing._
import scala.swing.event._
import java.awt.event._
object KeyEventTest extends SimpleSwingApplication {
def top = new MainFrame {
val label = new Label {
text = "No click yet"
}
contents = new BoxPanel(Orientation.Vertical) {
contents += label
border = Swing.EmptyBorder(30,30,10,10)
listenTo(keys)
reactions += {
case KeyPressed(_, Key.Space, _, _) =>
label.text = "Space is down"
case KeyReleased(_, Key.Space, _, _) =>
label.text = "Space is up"
}
focusable = true
requestFocus
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的解决方案要求我执行以下操作:
class MyFrame extends MainFrame {
this.peer.addKeyListener(new KeyListener() {
def keyPressed(e:KeyEvent) {
println("key pressed")
}
def keyReleased(e:KeyEvent) {
println("key released")
}
def keyTyped(e:KeyEvent) {
println("key typed")
}
})
}
Run Code Online (Sandbox Code Playgroud)
这似乎只有在没有按钮对象附加到该组件或其任何子组件时才有效。
| 归档时间: |
|
| 查看次数: |
5187 次 |
| 最近记录: |