scala actor swing代码实践
2015-07-31 18:12
369 查看
注意:我一开始用了新的scala ide for eclipse,用的是scala 2.11.7,默认没有swing包。
package com.dt.scala.hello import scala.swing._ import scala.actors.Actor import scala.actors.Actor.? import scala.swing.event.ButtonClicked /** * @author arsenal */ object GuiScala extends SimpleSwingApplication{ def top = new MainFrame{ calClickCount.start() title = "study scala gui" val button = new Button{ text = "click me" } val label = new Label() { text = "new" } contents = new BoxPanel(Orientation.Vertical) { contents += button contents += label border = Swing.EmptyBorder(50, 50, 50, 50) } listenTo(button); reactions += { case ButtonClicked(button) =>{ calClickCount ! label } } } object calClickCount extends Actor { def act { var clickCount = 0 var text = "" loop{ react{ case label:Label => { clickCount += 1 text = "click count = " + clickCount println(text) label.text = text } } } } } }
这边不能用self.receive来接收统计的次数由主线程来修改text.会报错,感谢群里有同学问起这个错误,我花了点时间想了下,解决了。
这边的重点是receive是 actor的方法,但直接在这里GUI调用self得到的不是actor, 而是UIElement
package com.dt.scala.hello import scala.swing._ import scala.swing.event._ import scala.actors._ import scala.actors.Actor import scala.actors.Actor._ import scala.runtime.StringAdd /** * @author arsenal */ object GuiSelfText extends SimpleSwingApplication{ def top = new MainFrame { title = "Second GUI" val button = new Button { text = "Scala" } val label = new Label { text = "Here is Spark!!!" } contents = new BoxPanel(Orientation.Vertical) { contents += button contents += label border = Swing.EmptyBorder(50,50,50,50) } listenTo(button) var clicks = 0 reactions += { case ButtonClicked(button) => { clicks += 1 val hiActor = new HelloActor hiActor.start val msg = "Received Message" val k = actor{ hiActor ! clicks while(true) { receive{ case msg:String => label.text = msg println(msg) case _ => {println("1")} } } } } } } } class HelloActor extends Actor{ def act(){ while(true){ receive{ case 1 => { sender ! "Clicked One Times" } case 2 => { sender ! "Clicked Two Times" } case _ => { sender ! "Clicked more than Two Times" } } } } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章推荐
- Spring实现AOP的四种方式
- spring MVC配置详解
- Java贪食蛇小游戏
- python 之 分割参数getopt
- Spring Boot使用自定义的properties
- java.面向对象
- c#与c++之间的交互
- C# 基于正则表达式的字符串验证
- 黑马程序员-----------C语言基础-----------iOS开发前奏
- java 文件读取大全
- JAVA生成RSA非对称型加密的公钥和私钥(利用JAVA API)
- Java程序设计之合租房synchronized(二)
- JAVA_RSA密钥生成
- java缓存(3、Oscache和Ehcache)
- java+搜索引擎
- qt5 采集摄像头的视音频
- Visual C#中的winform/webform/asp.net控件命名规范
- spring mvc @Autowired
- python2在pycharm中的中文乱码问题处理方式
- struts2 基于xml 配置文件的输入验证