AsWing 入门教程 1.3 给框架定位
作者:胡矿
著作权所有,请勿转载
Google doc
http://docs.google.com/Doc?id=dnp8gdz_3gdr96f
JFrame类本身只有几个用来改变框架外观的类。当然,通过继承,JFrame从不同的超类中(比如JWindow, Component)继承来很多用于处理框架的大小和位置的方法:
- dispose方法——关闭窗口并且回收用语创建窗口的任何资源;
- setIcon方法——用一个Icon对象设置窗口的图标,比如AttachIcon 和 LoadIcon;
- setTitle——改变标题栏当中的文字;
- setResizable——使用 Boolean 参数来决定框架大小是否能被用户改变。
- setClosable——使用 Boolean 参数来决定框架是否能被用户关闭。
图1.3-1当中给出了JFrame类的继承链。
(图1.3-1)
需要对 Component 类和 JWindow 类(它是JFrame类的父亲)进行仔细研究,在它们中能够找到缩放和改造框架的方法。例如,用于显示框架的show方法定义在JPopup类中。再例如,Component类中的setLocationXY方法是重定位一个组件的几种方法之一。如果你调用:
setLocationXY(x, y);
那么左上角被放到水平x像素、垂直y像素处((0,0)是屏幕左上角)。与此类似,Component中的setComBoundsXYWH方法允许你在一次操作中设定一个组件(特别是JFrame)的大小和位置,其形式为:
setComBoundsXYWH(x, y, width, height) ;
笔记:
对于框架,setLocationXY 和 setBoundsXYWH 中的坐标均是相对于整个屏幕的。在后面的章节还会看到,对于容器内的组件,其坐标是相对与容器的。
要记住:如果不明确定义框架的大小,那么其默认大小是0乘0像素。为了是例子程序尽可能简单,我们把框架设成能为大多数显示设置所能够接受的程度。
提醒:
本节所介绍的API是使框架具有正确观感的重要方法。这些方法的一部分定义在JFrame类当中;另一部分则定义在JFrame的各个父类当中。所以,你需要通过API文档来查找是否有完成特定目的的方法。遗憾的是,研究SDK文档相当费力。对于子类来说,API文档只是说明其覆盖的方法。例如,show对于JFrame类型的对象来说是可用的,但是由于它是从JPopup类继承而来,所以JFrame文档没有说明它。如果你认为应该有一个方法能够达到目的,但你使用的这个类的文档中却没有说明它,那么你应该在该类的超类API文档中查找这个方法。每个API页的顶部都有超链接到它的超类API页,并且每页在新方法和覆盖方法的总结下面都有一个继承的方法列表。
在本节末尾,我们给出一个简单的例子,以说明窗口操作。在例子中,那个可以关闭的框架具有如下特点:
1.其面积是整个舞台得四分之一
2.显示在舞台的中央
比如,舞台的大小是800×600像素,那么框架的大小就是400×300,它的左上角定位在(200, 150)。使用下面的步骤,可以得到舞台的大小。代码如下:
var bounds:IntRectangle = AsWingUtils.getVisibleMaximizedBounds();
var stageWidth:uint = bounds.width;
var stageHeight:uint = bounds.height;
完整的代码见例1.2。
例1.2
package
{
import flash.display.Sprite;
import org.aswing.JFrame;
import org.aswing.AsWingManager;
public class CenteredFrameTest extends Sprite
{
public function CenteredFrameTest()
{
AsWingManager.initAsStandard(this);
var frame:MyCenteredFrame = new MyCenteredFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.show();
}
}
}
import org.aswing.JFrame;
import org.aswing.geom.IntRectangle;
import org.aswing.AsWingUtils;
import org.aswing.LoadIcon;
class MyCenteredFrame extends JFrame
{
public function MyCenteredFrame()
{
//获取舞台可视区域的大小
var bounds:IntRectangle = AsWingUtils.getVisibleMaximizedBounds();
var stageWidth:uint = bounds.width;
var stageHeight:uint = bounds.height;
//把框架放在中心
this.setSizeWH(stageWidth/2, stageHeight/2);
this.setLocationXY(stageWidth/4, stageHeight/4);
//设置标题和图标
var icon:LoadIcon = new LoadIcon("icon.png");
this.setIcon(icon);
this.setTitle("置于正中的框架");
}
}
API:org.aswing.Component
- isVisible() : Boolean
检查组件是否可见。组件初始化为可见的,但顶层组件,如JFrame,除外。
- setVisible(b:Boolean) : void
根据b的取值来决定是显示组件还是隐藏组件。
- isShowing() : Boolean
检查组件是否正显示在舞台上。若是,它必须是可见的并且它所有的父元件也是可见的。
- isEnabled() : Boolean
检查组件是否被激活。被激活的组件能够接受键盘和鼠标的输入。组件初始为被激活。
- setEnabled(Boolean b) : void
激活或者禁用一个组件。
- getLocation() : IntPoint
返回该组件左上角坐标值,该值是相对于包围容器的左上角而言。(一个 IntPoint 对象 p 封装了一个x坐标和一个y坐标,访问它们使用p.x和p.y)
- getGlobalLocation() : IntPoint
返回该组件的左上角坐标值,该值使用的是舞台坐标。
- setComBounds(b:IntRectangle):void
setComBoundsXYWH(x:int, y:int, w:int, h:int):void
- setLocationXY(x:int, y:int):void
setLocation(newPos:IntPoint):void
把组件移动到新位置。如果该组件不是顶层组件,那么x和y坐标(或者p.x和p.y)使用该容器的坐标;如果该组件是顶层组件(例如JFrame),那么坐标使用舞台坐标。
- getSize(rv:IntDimension=null):IntDimension
得到组件的当前大小。
- setSize(newSize:IntDimension):void
setSizeWH(w:int, h:int):void
重设组件大小为指定的高度和宽度。
API:org.aswing.JWindow
- toFront():void
把该窗口显示到任何其它窗口的前面
- toBack():void
把该窗口移动到窗口栈的最后面,并且相应地重新排列所有可见窗口。
API:org.aswing.JFrame
- setResizable(b:Boolean):void
决定用户是否可以缩放框架
- setClosable(b:Boolean):void
- setTitle(t:String):void
把框架的标题栏中的文字设为字符串t。
- setIcon(ico:Icon):void
参数 ico,需要用作框架图标的图像,比如 AttachIcon 或者 LoadIcon
- getState():int
setState(s:int, programmatic:Boolean=true):void
获取或者设置框架的状态。状态是如下值之一:
JFrame.NORMAL
JFrame.ICONIFIED;
JFrame.MAXIMIZED
JFrame.MAXIMIZED_HORIZ
JFrame.MAXIMIZED_VERT
API:org.aswing.AsWingManager
- initAsStandard(root:DisplayObjectContainer):void
用一个可显示容器来对AsWing做全局初始化,这个方法必须在任何别的AsWing方法之前被调用,并且root的stage属性不为null。
API:org.aswing.AsWingUtils
- getVisibleMaximizedBounds(dis:DisplayObject=null):IntRectangle
获取当前舞台的可显示区域大小
API:org.aswing.LoadIcon
- 构造函数
LoadIcon(url:*, Number=-1, height:Number=-1, scale:Boolean=false, context:LoaderContext=null)
参数:
url :要加载的图表图片的 url, 图标图片加载之后就不能再更改
height:图标的高度
width:图标的宽度
scale:决定是否根据图标的高度和宽度来缩放图片,默认为不缩放,不过建议设为缩放