swt创建不规则窗口
2008-08-24 23:24
323 查看
import org.eclipse.swt[/b].SWT[/b];
import org.eclipse.swt[/b].events.MouseEvent;
import org.eclipse.swt[/b].events.MouseListener;
import org.eclipse.swt[/b].events.MouseMoveListener;
import org.eclipse.swt[/b].graphics.Point;
import org.eclipse.swt[/b].graphics.Rectangle;
import org.eclipse.swt[/b].graphics.Region;
import org.eclipse.swt[/b].widgets.Display;
import org.eclipse.swt[/b].widgets.Shell;
public class RingShell {
int[] createCircle(int radius, int centerX, int centerY) {
int[] points = new int[360 * 2];
for (int i = 0; i < 360; i++) {
points[i * 2] = centerX
+ (int) (radius * Math.cos(Math.toRadians(i)));
points[i * 2 + 1] = centerY
+ (int) (radius * Math.sin(Math.toRadians(i)));
}
return points;
}
Point originalPosition = null;
public RingShell() {
final Display display = new Display();
final Shell shell = new Shell(display, SWT[/b].NO_TRIM | SWT[/b].ON_TOP);
shell.setBackground(display.getSystemColor(SWT[/b].COLOR_DARK_MAGENTA));
Region region = new Region();
region.add(createCircle(100, 100, 100));
region.subtract(createCircle(50, 100, 100));
shell.setRegion(region);
// Make the shell movable by using the mouse pointer.
shell.addMouseListener(new MouseListener() {
public void mouseDoubleClick(MouseEvent e) {
shell.dispose(); // Double click to dispose the shell.
}
public void mouseDown(MouseEvent e) {
originalPosition = new Point(e.x, e.y);
}
public void mouseUp(MouseEvent e) {
originalPosition = null;
}
});
shell.addMouseMoveListener(new MouseMoveListener() {
public void mouseMove(MouseEvent e) {
if (originalPosition == null)
return;
Point point = display.map(shell, null, e.x, e.y);
shell.setLocation(point.x - originalPosition.x, point.y
- originalPosition.y);
System.out.println("Moved from: " + originalPosition + " to "
+ point);
}
});
Rectangle regionBounds = region.getBounds();
shell.setSize(regionBounds.width, regionBounds.height);
shell.open();
// Set up the event loop.
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
// If no more entries in event queue
display.sleep();
}
}
display.dispose();
region.dispose();
}
public static void main(String[] args) {
new RingShell();
}
}
import org.eclipse.swt[/b].events.MouseEvent;
import org.eclipse.swt[/b].events.MouseListener;
import org.eclipse.swt[/b].events.MouseMoveListener;
import org.eclipse.swt[/b].graphics.Point;
import org.eclipse.swt[/b].graphics.Rectangle;
import org.eclipse.swt[/b].graphics.Region;
import org.eclipse.swt[/b].widgets.Display;
import org.eclipse.swt[/b].widgets.Shell;
public class RingShell {
int[] createCircle(int radius, int centerX, int centerY) {
int[] points = new int[360 * 2];
for (int i = 0; i < 360; i++) {
points[i * 2] = centerX
+ (int) (radius * Math.cos(Math.toRadians(i)));
points[i * 2 + 1] = centerY
+ (int) (radius * Math.sin(Math.toRadians(i)));
}
return points;
}
Point originalPosition = null;
public RingShell() {
final Display display = new Display();
final Shell shell = new Shell(display, SWT[/b].NO_TRIM | SWT[/b].ON_TOP);
shell.setBackground(display.getSystemColor(SWT[/b].COLOR_DARK_MAGENTA));
Region region = new Region();
region.add(createCircle(100, 100, 100));
region.subtract(createCircle(50, 100, 100));
shell.setRegion(region);
// Make the shell movable by using the mouse pointer.
shell.addMouseListener(new MouseListener() {
public void mouseDoubleClick(MouseEvent e) {
shell.dispose(); // Double click to dispose the shell.
}
public void mouseDown(MouseEvent e) {
originalPosition = new Point(e.x, e.y);
}
public void mouseUp(MouseEvent e) {
originalPosition = null;
}
});
shell.addMouseMoveListener(new MouseMoveListener() {
public void mouseMove(MouseEvent e) {
if (originalPosition == null)
return;
Point point = display.map(shell, null, e.x, e.y);
shell.setLocation(point.x - originalPosition.x, point.y
- originalPosition.y);
System.out.println("Moved from: " + originalPosition + " to "
+ point);
}
});
Rectangle regionBounds = region.getBounds();
shell.setSize(regionBounds.width, regionBounds.height);
shell.open();
// Set up the event loop.
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
// If no more entries in event queue
display.sleep();
}
}
display.dispose();
region.dispose();
}
public static void main(String[] args) {
new RingShell();
}
}
相关文章推荐
- SetLayeredWindowAttributes 创建不规则窗口(此处为椭圆)
- 【原】创建 WPF 不规则窗口
- C#创建不规则窗体(窗口)的几种方式
- 创建WPF不规则窗口
- (JAVA/SWT/JFACE)[不规则窗口/自定义窗口]实现方案!
- 如何创建一个不规则形状的窗口
- 用Win32 API创建不规则窗口
- 创建一不规则窗口
- 创建不规则形状窗口
- 使用Qt创建透明盒不规则窗口的方法
- 用Win32 API创建不规则窗口
- Duilib 创建不规则窗口(转载)
- 用VB创建不规则窗口
- SWT笔记三,创建多个窗口
- 以BMP图片为蓝本创建不规则窗口
- 在windows上创建完美的不规则窗口
- SetWindowRgn,可用于创建不规则窗口
- VC创建不规则窗口
- 创建不规则窗口
- 如何创建不规则窗口