如何编写一个漂亮的SWT/RCP界面
推荐于2016-05-06 · 知道合伙人数码行家
知道合伙人数码行家
向TA提问 私信TA
Java 自从 1995 年发布以来,其图形界面一直为世人所诟病。无论是早期的 AWT,还是后来的 Swing 应用程序不能像本地应用程序一样执行,外观也不一样,响应的速度也不快。SWT 吸收了 AWT 和 Swing 实现的最好的部分 : 当可以得到本地组件时调用本地实现,当不能得到本地组件时使用 Java 实现。这就同时保证了与本地窗口部件相当的外观,又提高了响应速度。
目前 SWT 已被广泛应用于开发 JAVA 富客户端,但是基于 SWT/RCP 的应用程序界面都是经典的 Eclipse 界面风格 : 蓝色的标题栏、灰色的工具栏和状态栏、四方形的视图和编辑器、还是四方的控件,这些界面过于朴素,缺乏吸引力。
其实我们可以基于 SWT/RCP,编写漂亮 GUI 的界面。自定义窗口的形状,通过图片背景来美化 SWT/RCP 窗体界面。窗体可以是多边形,如矩形、圆形、以及这些形状的叠加。按钮控件也可以任意多边形。
下图是经典的 Eclipse 风格界面和美化后界面的比较:左面是一个经典的 SWT/RCP 窗体界面;右面是美化后的窗体,黑色的外框由一个矩形和一个圆形的叠加而成、圆形的播放按钮、圆弧形的退出按钮、不规则的放映视图等。
return rect;
}
Region 类里面也提供了直接生成矩形的函数 add(Rectangle rect)和 add(int x, int y, int width, int height)。如果要生成不规则的窗体,如圆形,或者其他形状的窗体,Region 不直接提供函数,只能通过坐标数组来实现。
如图所示,圆形是通过一组逆时针连接而成的点构成,各个点可以有园半径,圆心坐标推算而成。A1 的坐标是 (Xo-r, Yo). An 的 X 坐标是 XAn=Xo-r+n,Y 坐标是 YAn=Yo+R。
生成圆形坐标数组的函数代码如下:
清单 2. 生成圆形坐标数组的函数代码
int[] circle(int r, int offsetX, int offsetY) {
int[] ring = new int[8 * r + 4];
// x^2 + y^2 = r^2
for (int i = 0; i < 2 * r + 1; i++) {
int x = i - r;
int y = (int) Math.sqrt(r * r - x * x);
ring [2 * i] = offsetX + x;
ring [2 * i + 1] = offsetY + y;
ring [8 * r - 2 * i - 2] = offsetX + x;
ring [8 * r - 2 * i - 1] = offsetY - y;
}
return ring;
}
来源: ibm 作者:饶有清