如何在Scala中向Swing组件添加侦听器?
我正在尝试在Rubik的立方体
Scala应用程序中实现MVC设计模式.
在Java中,我会通过在控制器类中使用侦听器向按钮添加ActionListener来实现此目的.在斯卡拉,我发现这非常困难.谁能给我一些如何做到这一点的例子? 解决方法
当然,您可以使用与Java相同的方式执行此操作.但是,使用Scala,您还可以使用Scala swing库来执行此操作,它提供了一组围绕Java Swing类的包装器.它使用
publishers和
reactors的概念来观察事件并做出反应.可以在
here找到关于库的设计的介绍,包括样品.
发布者特征定义了一个发布(e:Event)方法,以通知所有已注册的Reactors有关事件的信息.您可以通过简单地扩展此特征使任何类成为发布者,并调用publish方法来发布您的事件.可以使用def listenTo(ps:Publisher)方法注册reactor,并使用def deafTo(ps:Publisher)注销.在收听发布者时,您可以通过添加具有类型PartialFunction [Event,Unit]的反应来响应此发布者的事件,如下所示 class MyComponent { listenTo(publisher) reactions += { case e: MyEvent => println("Got event " + e) } } 下面是使用Scala-swing的一些(完全不完整的)代码,希望能够让您了解如何在MVC模式中使用它.您也可以查看作为库的一部分的test package,您可以在其中找到许多示例. 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) } } 表单中的listenTo(button1)方法将通知表单任何按钮事件.在这种情况下,它将对ButtonClicked事件做出反应,该事件是在scala-swing库中定义的事件.在此示例中,表单只是将按钮事件重新发布到某个自定义的业务事件.控制器类依次监听表单,并以适当的方式对业务事件做出反应. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |