osc*_*car 4 swing scala actionlistener rubiks-cube
我正在尝试在Rubik的立方体Scala应用程序中实现MVC设计模式.
在Java中,我会通过ActionListener在控制器类中添加一个带有侦听器的按钮来实现此目的.在斯卡拉,我发现这非常困难.谁能给我一些如何做到这一点的例子?
Arj*_*ijl 12
当然,您可以使用与Java相同的方式执行此操作.但是,使用Scala,您还可以使用Scala swing库来执行此操作,它提供了一组围绕Java Swing类的包装器.它使用发布者和反应器的概念来观察事件并做出反应.可以在此处找到有关库的设计的介绍,包括样品.
该Publisher特征定义了一种publish(e: Event)方法,用于通知所有已注册的Reactors有关事件的信息.您可以通过简单地扩展此特征使任何类成为发布者,并调用publish方法来发布您的事件.可以使用该方法注册反应器def listenTo(ps: Publisher),并通过使用注销def deafTo(ps: Publisher).在收听发布者时,您可以通过添加具有类型的反应来响应此发布者的事件PartialFunction[Event, Unit],如下所示
class MyComponent {
listenTo(publisher)
reactions += {
case e: MyEvent => println("Got event " + e)
}
}
Run Code Online (Sandbox Code Playgroud)
下面是使用Scala-swing的一些(完全不完整的)代码,希望能够让您了解如何在MVC模式中使用它.您还可以查看作为库的一部分的测试包,您可以在其中找到许多示例.
import scala.swing
import scala.swing.event._
case object MyBusinessEvent extends Event
class MyController extends Publisher {
val form = new MyForm
listenTo(form)
reactions += {
case MyBusinessEvent => //handle event code here
}
}
class MyForm extends Publisher {
val ui = new GridBagPanel {
val c = new Constraints
.... more code here
}
val button1 = new Button("Button 1")
//add button to panel
listenTo(button1)
reactions += {
case ButtonClicked(_) => publish(MyBusinessEvent)
}
}
Run Code Online (Sandbox Code Playgroud)
listenTo(button1)表单中的方法将通知表单任何按钮事件.在这种情况下,它将对ButtonClicked事件做出反应,事件是在scala-swing库中定义的事件.在此示例中,表单只是将按钮事件重新发布到某个自定义的业务事件.控制器类依次监听表单,并以适当的方式对业务事件做出反应.
| 归档时间: |
|
| 查看次数: |
2910 次 |
| 最近记录: |