我一直在努力创建一个圆角的SWT Shell但没有成功。
谷歌在这个领域没什么帮助,我一直试图在shell上设置一个Region,但我找不到一种方法来创建一个圆形矩形区域。如果有人能指出我正确的方向会很棒。
由于
答案 0 :(得分:5)
我认为唯一的方法是手动构建圆形 Region
,然后将其设置为shell(或任何SWT控件)。
最终不是那么难...... 4个圆圈和2个矩形:
这里是我写的实用程序:
/**
* Creates a region that delineates a rounded rectangle:
*
* @param x the initial X corner (of the original rectangle)
* @param y the initial Y corner (of the original rectangle)
* @param W the max width of the rectangle
* @param H the max height of the rectangle
* @param r the radius of the rounding circles
* @return the following region:
* <pre>
* P0 (x,y)
* . ___ _ _ _ _ _ _ _ _ _ _ _ ___
* / \ / \ A
* | · | | · | :
* \___/ \___/ :
* | <-> | :
* r :
* | | :
* :
* | | : H
* :
* | | :
* :
* | | :
* :
* | ___ ___ | :
* / \ / \ :
* | · | | · | :
* \___/ _ _ _ _ _ _ _ _ _ _ \___/ v
*
* <------------------------------->
* W
* </pre>
*/
public static Region createRoundedRectangle(int x, int y, int W, int H, int r) {
Region region = new Region();
int d = (2 * r); // diameter
region.add(circle(r, (x + r), (y + r)));
region.add(circle(r, (x + W - r), (y + r)));
region.add(circle(r, (x + W - r), (y + H - r)));
region.add(circle(r, (x + r), (y + H - r)));
region.add((x + r), y, (W - d), H);
region.add(x, (y + r), W, (H - d));
return region;
}
circle(int, int, int)
的位置(我是从某些this SWT代码段中获取的):
/**
* Defines the coordinates of a circle.
* @param r radius
* @param offsetX x offset of the centre
* @param offsetY y offset of the centre
* @return the set of coordinates that approximates the circle.
*/
public static int[] circle(int r, int offsetX, int offsetY) {
int[] polygon = 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);
polygon[2 * i] = offsetX + x;
polygon[2 * i + 1] = offsetY + y;
polygon[8 * r - 2 * i - 2] = offsetX + x;
polygon[8 * r - 2 * i - 1] = offsetY - y;
}
return polygon;
}
答案 1 :(得分:4)