Scala学习整理[第三十二章 GUI编程]<Programming In Scala>
来源:互联网 发布:快速排序算法c语言实现 编辑:程序博客网 时间:2024/05/16 23:44
第三十二章 GUI编程
package SecondWithProgrammingInScalaimport java.io.Fileimport scala.swing.{TextField, _}import scala.swing.event.{ButtonClicked, EditDone}/** * GUI 编程 * 大致的使用和实际效果和JavaSwing没啥区别 * 之前使用过Swing和Vaadin(Java->Html/js) ,相比浏览器流派 ,Java客户端适用性还是低一些的 * * * 使用swing时候出现了版本问题 * scala在2.10以后对模块进行了比较大的划分 ,不少包被拆分成了不同的模块 * 使用maven关联要注意 * 以scala-library为核心 ,核心版本号2.12去关联其他模块包 * 官方还提供了一个scala-lang-all ,包括了之前拆分出去的包 * */object ScalaSwingApp extends SimpleSwingApplication { /** * 和Java编写方式不同 ,Java大多将参数通过构造函数传递进去 * Button okBtn = new Button(text = ok) * scala而多是使用{}直接重载里面的属性(实质是匿名子类) ,更符合实际 ,不同功能的按钮就是不同的类. * val okBtn = new Button{override text = ok} * : new OkButton{override text = ok} extends Button */ //设置程序主窗口 override def top: Frame = new MainFrame { //窗口标题 title = "Scala Swing App" //注册组件 val clickBtn = new Button { text = "Click me" } val clickBlueBtn = new Button { background = java.awt.Color.BLUE text = "Click me" } val tipL = new Label { text = "No button clicks registered" } //设置窗口内容(布局){组件} contents = new BoxPanel(Orientation.Vertical) { //这里的contents是指BoxPanel布局的内容 contents += clickBtn contents += clickBlueBtn contents += tipL border = Swing.EmptyBorder(30, 30, 10, 30) } //设置监听 listenTo(clickBtn, clickBlueBtn) //设置监听回调函数 var nClicks = 0 reactions += { case ButtonClicked(btn) => { nClicks += 1 if (btn == clickBlueBtn) tipL.text = "You just Click the Blue Button:" + nClicks else tipL.text = "Number of button Clicks:" + nClicks } } }}/** * 简单计算器 */object Calculation extends SimpleSwingApplication { override def top: Frame = new MainFrame { title = "简单计算器" //文本组件 object Elem1 extends TextField { columns = 5 } object Elem2 extends TextField { columns = 5 } object Func extends TextField { columns = 2 } object Result extends TextField { columns = 20 } //提示组件 val tips_defualt = "请输入要计算的值[0-9]和运算符[+-*/]" val tipsL = new Label(tips_defualt) //设置布局 contents = new BoxPanel(Orientation.Vertical) { //设置提示 contents += tipsL //设置输入框 contents += new BoxPanel(Orientation.Horizontal) { contents += Elem1 contents += new Label(" ") contents += Func contents += new Label(" ") contents += Elem2 } //设置结果 contents += Result border = Swing.EmptyBorder(30, 30, 30, 30) } //设置动作 var errors = 0 listenTo(Elem1, Elem2, Func) reactions += { //输入完成 case EditDone(_) => calculate } //设置计算函数 def calculate: Unit = { try { //复原提示 tipsL.text = tips_defualt //检查运算符并试图转换数值 Func.text match { case "+" => Result.text = (Elem1.text.toInt + Elem2.text.toInt).toString case "-" => Result.text = (Elem1.text.toInt - Elem2.text.toInt).toString case "*" => Result.text = (Elem1.text.toInt * Elem2.text.toInt).toString case "/" => Result.text = (Elem1.text.toInt / Elem2.text.toInt).toString case _ => tipsL.text_=("运算符输入错误 ,请重新输入") } } catch { //数值转换出错 case e: NumberFormatException => tipsL.text_=("数值输出错误 ,请重新输入") case e => tipsL.text_=(e.getMessage) } } }}
0 0
- Scala学习整理[第三十二章 GUI编程]<Programming In Scala>
- Scala学习整理[第三章 入门Ⅱ]<Programming In Scala>
- Scala学习整理[第三十一章 连接符解析]<Programming In Scala>
- Scala学习整理[第二章 入门Ⅰ]<Programming In Scala>
- Scala学习整理[第十四章 测试]<Programming In Scala>
- Scala学习整理[第七-九章 函数化编程的函数]<Programming In Scala>
- Scala学习整理[第二十七-二十九章 模块化编程和Java]<Programming In Scala>
- Scala学习整理[第四-六章 使用Scala运行类/对象]<Programming In Scala>
- Scala学习整理[总结篇]<Programming In Scala>
- Functional Programming in Scala第三章练习
- Scala学习整理[第十章 继承重载应用]<Programming In Scala>
- Scala学习整理[第十一-十三章 类型/特质和其应用/包]<Programming In Scala>
- Scala学习整理[第十五章 样本类和模式匹配]<Programming In Scala>
- Scala学习整理[第十六章 List应用与排序算法]<Programming In Scala>
- Scala学习整理[第十七-十八章 集合和有状态对象]<Programming In Scala>
- Scala学习整理[第十九章 泛型和约束系统]<Programming In Scala>
- Scala学习整理[第二十-二十一章 抽象成员和隐式转换]<Programming In Scala>
- Scala学习整理[第二十二-二十三章 List和For循环]<Programming In Scala>
- 监听接收到的短信
- 异常Hibernate:could not initialize proxy - no Session
- java.lang.IllegalStateException: Driver for test database type [H2] is not available in the classpat
- 求一个数的倒数
- 部署Web应用
- Scala学习整理[第三十二章 GUI编程]<Programming In Scala>
- 冒泡排序,仔细看看有什么不同?
- 线程池的原理及实现及问题
- P1098 字符串的展开
- Atitit 图像处理之编程之类库调用的接口api cli gui ws rest attilax大总结.docx
- 【jzoj3892】【放棋子】【数论】【第二类斯特林数】
- 辐射天线区域划分
- Harris角点检测原理详解
- 2017年1月20日