Scala学习笔记12 - GUI编程
2016-08-04 11:58
218 查看
===GUI编程
scala图形用户界面编程可以使用scala.swing库,该库提供了对java的Swing框架的GUI类的访问,对其进行包装,隐藏了大部分复杂度。示例如下:object MyScalaGUI extends SimpleSwingApplication {
deftop = new
MainFrame {
title = "My ScalaGUI"
location = new Point(600,300)
preferredSize = newDimension(400, 200)
valbutton = new Button {
text = "Click me"
}
vallabel = new Label {
text= "Who am I?"
}
contents = new
BoxPanel(Orientation.Vertical){
contents+= button
contents+= label
}
listenTo(button)
reactions += {
caseButtonClicked(b) => label.text = "Hello, I'm Tom."
}
}
}
要编写图形界面程序,你可以继承SimpleSwingApplication类,该类已经定义了包含一些设置java Swing框架代码的main方法,main方法随后会调用top方法,而top方法是抽象的,需要你来实现。top方法应当包含定义顶级GUI组件的代码,这通常是某种Frame。
GUI类库:
Frame:即可以包含任意数据的窗体。Frame有一些属性(也就是getter和setter),其中比较重要的有title(将被写到标题栏)、contents(将被显示在窗体中)。Frame继承自Container,每个Container都有一个contents属性,让你获得和设置它包含的组件,不过,Frame的contents只能包含一个组件,因为框架的contents属性只能通过“=”赋值,而有些Container
(如Panel)的contents可以包含多个组件,因为它们的contents属性可以通过“+=”赋值。
MainFrame:就像是个普通的Swing的Frame,只不过关闭它的同时也会关闭整个GUI应用程序。
Panel:面板是根据某种固定的布局规则显示所有它包含的组件的容器。面板可以包含多个组件。
处理事件:
为了处理事件,你需要为用户输入事件关联一个动作,scala和java基本上用相同的“发布/订阅”方式来处理事件。发布者又称作事件源,订阅者又称作事件监听器。举例来说,Button是一个事件源,它可以发布一个事件ButtonClicked,表示该按钮被点击。scala中事件是真正的对象,创建一个事件也就是创建一个样本类的实例,样本类的参数指向事件源。事件(样本)类包含在scala.swing.event包中。
在scala中,订阅一个事件源source的方法是调用listenTo(source),取消订阅的方法是调用deafTo(source)。比如:你可以让一个组件A监听它其中的一个组件B,以便A在B发出任何事件时得到通知。为了让A对监听到的事件做出响应,你需要向A中名为reactions的属性添加一个处理器,处理器也就是带有模式匹配的函数字面量,可以在单个处理器中用多个样本来匹配多种事件。可使用“+=”向reactions中添加处理器,使用“-=”从中移除处理器。从概念上讲,reactions中安装的处理器形成一个栈,当接收到一个事件时,最后被安装的处理器首先被尝试,但不管尝试是否成功,后续的处理器都会被一一尝试。
相关文章推荐
- ASP.NET 3.5核心编程学习笔记(12):SqlCommand、SqlDataReader、事务
- python学习笔记——Tkinter GUI编程——简介
- scala编程第16章学习笔记(3)——List类的高阶方法
- 学习笔记-基础知识12-网络编程
- Scala学习笔记--函数式编程
- J2ME学习笔记(五)-----MIDlets中GUI(图形)编程
- scala编程第16章学习笔记(1)
- scala编程第18章学习笔记——有状态的对象
- scala编程第16章学习笔记(4)——List对象的方法
- Java基础班学习笔记(15)GUI图形界面编程
- Scala学习笔记(3):纯函数式编程的一些思想和技巧
- UNIX环境编程学习笔记(12)——文件I/O之目录操作
- python 学习笔记12-----网络编程
- scala编程第17章学习笔记(4)——元组
- Java 学习笔记 (8) - GUI编程之 Frame
- 实习笔记 12:Scala 学习笔记
- c++ 学习笔记(高级linux编程) day12
- js学习12-《JS DOM 编程艺术》笔记
- 编程学习笔记12--树状数组的运用
- scala编程第19章学习笔记(1)——类型参数化