AsWing之中有许多实用的GUI组件,其中JFrame是比较常见的。JFrame模拟的是类似Windows那样的窗口,具有拖动、最大最小化、调整大小或者关闭等特性。熟练运用AsWing本来是应该先要了解一些其他的布局等基本知识的,不过因为是入门,所以先依样画葫芦再慢慢深入。下面从AS3代码来看看一个简单的JFrame。
package
{
import flash.display.Sprite;
import org.aswing.AsWingManager;
import org.aswing.JFrame;
import org.aswing.Container ;
public class testFrame extends Sprite
{
private var frame:JFrame;
public function testFrame()
{
AsWingManager.initAsStandard(this);
frame = new JFrame(this,"This is JFrame");
frame.setSizeWH(300,200);
frame.show();
}
}
}
(一) JFrame 的样貌和结构
运行结果如图所示,左边这个窗口就是JFrame组件,右边的我给它做了一些标记方便说明。可以看到JFrame是由好几个部分构成的,包括标题栏(TitleBar)、内容面板④(ContentPanel)、边框(Border)等。其中标题栏也是一个容器,里面又包含了图标(Icon)①、标题(Title)②、最小化按钮、最大化按钮、关闭按钮。可以通过SetTitleBar方法替换自己定义的标题栏,不过这属于进阶内容,暂且不表。
现在这个简单的JFrame已经具有拖动、调整、关闭等基本功能,不需要我们再额外去添加这些行为。唯一例外的,窗口的大小必须先指定,然后调用show()方法让它加入显示列表,否则运行结果就是空白的。
(二) JFrame 的常用设置
继用上面的代码,我们新创建的JFrame实例名字是frame,所以通过调用frame的各种方法,就可以对这个窗口进行控制。
frame.setIcon(null); // 把图标设为空的,也可以把null改为其他自定义的Icon
frame.setTitle("Hello!"); //更改新的标题文字
frame.setSizeWH(300,200); //设置新的大小 宽和高
frame.setLocationXY(80,50); //设置坐标X,Y
frame.setClosable(true); //设置窗口是否能够关闭,如果取值False 则关闭图标不显示。
frame.setResizable(true); //设置窗口是否能够调整大小,如果False则最大最小化按钮无效,边界也会失去调整功能。
frame.setState(JFrame.MAXIMIZED); //改变状态,让窗口最大化,MAXIMIZED是JFrame的静态属性,最小化是JFrame.ICONIFIED,正常化JFrame.NORMAL
frame.setDragDirectly(true); //让窗口直接拖动,而不是默认的那种只显示一个框的效果。
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); // 把默认的关闭行为改成隐藏,点击关闭后只隐藏窗口
frame.closeReleased(); // 尝试关闭窗口,调用默认的关闭方法,也可以通过setDefaultCloseOperation指定想要的关闭函数。
(三) 在JFrame 里面添加组件。
JFrame对象本身是不能附加组件的,也就是说调用frame.append(...)这样的方法会出错,是不正确的。添加组件应该放在内容面板(Content Panel),内容面板是一个Container对象,添加到JFrame的组件都只能放到它上面。
首先要把内容面板引用出来:
var box:Container = frame.getContentPane();
然后对box引用的对象就是上面提到的内容面板,直接对他进行添加组件操作即可,这里我们新建一个按钮,然后附加上去,至于按钮放上去以后会被放到什么位置,是由布局管理器决定的,暂时我们先绕开这个位置的问题,后面再专门对布局管理来研究。
var btn:JButton = new JButton("Don't Click Me");
box.append(btn);
经过这些设置操作以后,原来的JFrame窗口变成了现在这个样子了:
(四) JFrame的事件
JFrame最大最小化、恢复正常都会发出相应的事件,某些状态改变也会发出事件。
这些事件是 FrameEvent 这个类的静态属性。FrameEvent 属于 org.aswing.event.FrameEvent ,使用前要先import。 状态事件则是InteractiveEvent.STATE_CHANGED。
例如监听JFrame的最大化事件语句:
frame.addEventListener(FrameEvent.FRAME_MAXIMIZED,__onWinMaxDoSomething);
其他相应的事件是:
FrameEvent.FRAME_MAXIMIZED 最大化
FrameEvent.FRAME_RESTORED 恢复
FrameEvent.FRAME_ICONIFIED 最小化
FrameEvent.FRAME_CLOSING 关闭事件
至于拖动窗口的事件,是由拖动管理器处理的,属于比较深的内容,暂且略过。
(五)小结
更多的方法和属性,可以参考AsWing的官方文档,它采用的是Adobe那种格式,全是英文的,凑合着看吧。左上方的框架是包列表,左下是类列表,右边就是相应的资料了。
以上所记载的都是抛砖引玉的入门而已,修行还是要靠个人的深入研究,亲自动手调试。
最后,附上这个案例的源代码: