Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 위피
- brew
- 자바
- 이지형
- SWT
- 사요
- 그녀가말했다
- 김장훈
- 유희열의라디오천국
- CDMA
- 라디오
- 페이스북
- 민동현의토요명화
- 퀄컴
- VoIP
- "명탐정 코난"
- 모던음악만만세
- 차트쇼쇼쇼
- 러시아
- 민동현
- 공정위
- HSDPA
- Java
- Wibro
- 한국의 기획자들
- itmusic
- EV-DO Rev. B
- ETF
- 김장훈의who
- USIM
Archives
- Today
- Total
01-24 03:41
zyint's blog
Ring Shell (원형 윈도우 만들기) 본문
/******************************************************************************
* Copyright (c) 1998, 2004 Jackwind Li Guojie
* All right reserved.
*
* Created on Jan 25, 2004 7:58:06 PM by JACK
* $Id$
*
* visit: http://www.asprise.com/swt
*****************************************************************************/
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.MouseMoveListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.graphics.Region;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.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.NO_TRIM | SWT.ON_TOP);
shell.setBackground(display.getSystemColor(SWT.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();
}
}
드래그도 가능!
출처 : http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/RingShell.htm
Comments