亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sizeborder.java

?? Eclipse編程技術與實例一書配套的光盤代碼全部內容
?? JAVA
字號:
package org.test.custom.form;

import java.util.Timer;
import java.util.TimerTask;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;

public class SizeBorder extends Canvas {
	private static final long UPDATE_DELAY = 25;

	private static final int AREA_NONE = 0;

	private static final int AREA_N = 1;

	private static final int AREA_S = 2;

	private static final int AREA_E = 4;

	private static final int AREA_W = 8;

	private static final int AREA_NW = 9;

	private static final int AREA_NE = 5;

	private static final int AREA_SE = 6;

	private static final int AREA_SW = 10;

	private Rectangle snapBack;

	private boolean cancelled = true;

	private volatile long lastUpdate;

	private Timer timer = new Timer(true);

	private TimerTask timerTask;

	private Composite resizableParent;

	private Point minSize, mouseDownOffset;

	private int borderWidth = 4, cornerSize = 16;

	private Display display;

	private Cursor cursor, cursorNWSE, cursorNESW, cursorWE, cursorNS;

	private int currentArea;

	public SizeBorder(Composite parent, int style) {
		this(parent, parent.getShell(), style);
	}

	public SizeBorder(Composite parent, final Composite resizableParent,
			int style) {
		super(parent, checkStyle(style));
		this.resizableParent = resizableParent;
		this.display = getDisplay();

		cursorNWSE = new Cursor(getDisplay(), SWT.CURSOR_SIZENWSE);
		cursorNESW = new Cursor(getDisplay(), SWT.CURSOR_SIZENESW);
		cursorWE = new Cursor(getDisplay(), SWT.CURSOR_SIZEWE);
		cursorNS = new Cursor(getDisplay(), SWT.CURSOR_SIZENS);

		// 銷毀創建的Cursor控件
		addListener(SWT.Dispose, new Listener() {
			public void handleEvent(Event e) {
				cursorNWSE.dispose();
				cursorNESW.dispose();
				cursorWE.dispose();
				cursorNS.dispose();
			}
		});

		// 沒有設置SWT.BORDER情況下的樣式
		if ((style & SWT.BORDER) != 0) {
			final Color highlightShadowColor = display
					.getSystemColor(SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW);
			final Color lightShadowColor = display
					.getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW);
			final Color normalShadowColor = display
					.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW);
			final Color darkShadowColor = display
					.getSystemColor(SWT.COLOR_WIDGET_DARK_SHADOW);

			addListener(SWT.Paint, new Listener() {
				public void handleEvent(Event event) {
					Rectangle r = getClientArea();
					if (r.width == 0 || r.height == 0)
						return;
					drawBevelRect(event.gc, r.x, r.y, r.width - 1,
							r.height - 1, lightShadowColor, darkShadowColor);
					drawBevelRect(event.gc, r.x + 1, r.y + 1, r.width - 3,
							r.height - 3, highlightShadowColor,
							normalShadowColor);
				}
			});
		}

		addListener(SWT.MouseDown, new Listener() {
			public void handleEvent(Event event) {
				// 處理右鍵和左鍵的事件
				if (event.button == 1) {
					currentArea = areaAtPoint(event.x, event.y);
					if (currentArea == AREA_NONE)
						return;
					if (resizableParent instanceof Shell)
						mouseDownOffset = toDisplay(event.x, event.y);
					else
						mouseDownOffset = display.map(SizeBorder.this,
								resizableParent.getParent(), event.x, event.y);
					snapBack = resizableParent.getBounds();
					cancelled = false;
				} else if (event.button == 3
						&& (event.stateMask & SWT.BUTTON1) != 0) {
					if (snapBack != null) {
						resizableParent.setBounds(snapBack);
						snapBack = null;
						cancelled = true;
					}
				}
			}
		});

		// 注冊光標移動的事件偵聽器
		addListener(SWT.MouseMove, new Listener() {
			public void handleEvent(final Event event) {
				if ((event.stateMask & SWT.BUTTON1) == 0)
					updateCursor(areaAtPoint(event.x, event.y));

				if (!cancelled && (event.stateMask & SWT.BUTTON1) != 0) {
					if (timerTask != null) {
						timerTask.cancel();
						timerTask = null;
					}
					long now = System.currentTimeMillis();
					if (lastUpdate + UPDATE_DELAY < now) {
						performResize(event);
						lastUpdate = now;
					} else {
						timerTask = new TimerTask() {
							public void run() {
								final TimerTask executingTask = this;
								event.display.asyncExec(new Runnable() {
									public void run() {
										if (executingTask != timerTask)
											return;
										performResize(event);
									}
								});
							}
						};
						timer.schedule(timerTask, UPDATE_DELAY);
					}
				}
			}
		});

		addListener(SWT.MouseUp, new Listener() {
			public void handleEvent(Event event) {
				if (timerTask != null) {
					timerTask.cancel();
					timerTask = null;
				}
				if (!cancelled && (event.stateMask & SWT.BUTTON1) != 0) {
					performResize(event);
				}
			}
		});

		addListener(SWT.Show, new Listener() {
			public void handleEvent(Event event) {
				Point p = toControl(display.getCursorLocation());
				updateCursor(areaAtPoint(p.x, p.y));
			}
		});

		addListener(SWT.Dispose, new Listener() {
			public void handleEvent(Event event) {
				timer.cancel();
			}
		});
	}

	private static int checkStyle(int style) {
		//int mask = SWT.NONE;
		//style &= mask;
		style = SWT.NO_FOCUS;
		return style;
	}

	// 執行重畫窗口的動作
	private void performResize(Event event) {
		// 首先確認在父類窗口之中
		Rectangle ca;
		if (resizableParent instanceof Shell)
			ca = getDisplay().getClientArea();
		else
			ca = getDisplay().map(resizableParent.getParent(), null,
					resizableParent.getParent().getClientArea());
		Point caOffset = toControl(ca.x, ca.y);
		event.x = Math.max(Math.min(event.x, caOffset.x + ca.width - 1),
				caOffset.x);
		event.y = Math.max(Math.min(event.y, caOffset.y + ca.height - 1),
				caOffset.y);

		// 計算相對于初始鼠標位置的移動
		Point movement = (resizableParent instanceof Shell) ? toDisplay(
				event.x, event.y) : display.map(this, resizableParent
				.getParent(), event.x, event.y);
		movement.x -= mouseDownOffset.x;
		movement.y -= mouseDownOffset.y;

		// 計算窗口新的大小和位置
		int newW = snapBack.width, newH = snapBack.height, newX = snapBack.x, newY = snapBack.y;
		if ((currentArea & AREA_E) != 0)
			newW += movement.x;
		else if ((currentArea & AREA_W) != 0) {
			newW -= movement.x;
			newX += snapBack.width - newW;
		}
		if ((currentArea & AREA_S) != 0)
			newH += movement.y;
		else if ((currentArea & AREA_N) != 0) {
			newH -= movement.y;
			newY += snapBack.height - newH;
		}

		// 限定其大小
		int minW, minH;
		if (minSize != null) {
			minW = minSize.x;
			minH = minSize.y;
		} else {
			minW = 0;
			minH = 0;
		}
		int maxX = snapBack.x + snapBack.width - minW;
		int maxY = snapBack.y + snapBack.height - minH;

		newW = Math.max(minW, newW);
		newH = Math.max(minH, newH);
		newX = Math.min(maxX, newX);
		newY = Math.min(maxY, newY);

		resizableParent.setBounds(newX, newY, newW, newH);
	}

	// 更改光標的位置
	private void updateCursor(int area) {
		Cursor c = null;
		switch (area) {
		case AREA_N:
		case AREA_S:
			c = cursorNS;
			break;
		case AREA_W:
		case AREA_E:
			c = cursorWE;
			break;
		case AREA_NW:
		case AREA_SE:
			c = cursorNWSE;
			break;
		case AREA_NE:
		case AREA_SW:
			c = cursorNESW;
			break;
		}
		if (cursor == c)
			return;
		cursor = c;
		setCursor(c);
	}

	// 判斷內部窗口的范圍
	private int areaAtPoint(int x, int y) {
		Point size = getSize();
		if (x < borderWidth) // left edge
		{
			if (y < cornerSize)
				return AREA_NW;
			else if (y >= size.y - cornerSize)
				return AREA_SW;
			else
				return AREA_W;
		} else if (x >= size.x - borderWidth) // right edge
		{
			if (y >= size.y - cornerSize)
				return AREA_SE;
			else if (y < cornerSize)
				return AREA_NE;
			else
				return AREA_E;
		} else if (y < borderWidth) // top edge
		{
			if (x < cornerSize)
				return AREA_NW;
			else if (x >= size.x - cornerSize)
				return AREA_NE;
			else
				return AREA_N;
		} else if (y >= size.y - borderWidth) // bottom edge
		{
			if (x >= size.x - cornerSize)
				return AREA_SE;
			else if (x < cornerSize)
				return AREA_SW;
			else
				return AREA_S;
		} else
			return AREA_NONE;
	}

	public Point computeSize(int wHint, int hHint, boolean changed) {
		checkWidget();
		if (wHint == SWT.DEFAULT)
			wHint = 0;
		if (hHint == SWT.DEFAULT)
			hHint = 0;
		return new Point(wHint, hHint);
	}

	public boolean setFocus() {
		checkWidget();
		return false;
	}

	public boolean isReparentable() {
		checkWidget();
		return false;
	}

	// 設置窗口允許的最小尺寸
	public void setMinimumShellSize(Point p) {
		checkWidget();
		this.minSize = p;
	}

	public void setMinimumShellSize(int width, int height) {
		checkWidget();
		this.minSize = new Point(width, height);
	}

	// 設置邊框的大小
	public void setBorderWidth(int width) {
		checkWidget();
		borderWidth = width;
		Point p = toControl(display.getCursorLocation());
		updateCursor(areaAtPoint(p.x, p.y));
	}

	public void setCornerSize(int size) {
		checkWidget();
		cornerSize = size;
		Point p = toControl(display.getCursorLocation());
		updateCursor(areaAtPoint(p.x, p.y));
	}

	// 畫出矩形
	private static void drawBevelRect(GC gc, int x, int y, int w, int h,
			Color topleft, Color bottomright) {
		gc.setForeground(bottomright);
		gc.drawLine(x + w, y, x + w, y + h);
		gc.drawLine(x, y + h, x + w, y + h);

		gc.setForeground(topleft);
		gc.drawLine(x, y, x + w - 1, y);
		gc.drawLine(x, y, x, y + h - 1);
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人国产电影网| 国产a视频精品免费观看| 欧美国产日韩a欧美在线观看| 制服丝袜av成人在线看| 91麻豆福利精品推荐| 精品国产乱子伦一区| 欧美一区二区大片| 欧美精品 日韩| 91精品国产全国免费观看| 在线不卡中文字幕播放| 91精品久久久久久久久99蜜臂| 91精品国产综合久久香蕉的特点| 欧美另类z0zxhd电影| 日韩午夜在线影院| 日韩精品一区二区三区四区视频 | 欧美性色欧美a在线播放| 91福利精品视频| 欧亚洲嫩模精品一区三区| 91成人网在线| 欧美一区午夜精品| 日韩精品中文字幕在线一区| 久久久激情视频| 国产精品短视频| 一区二区三区在线视频观看58| 亚洲精品免费电影| 日韩综合一区二区| 久久国产精品99久久久久久老狼| 国内精品写真在线观看| 不卡电影一区二区三区| 在线观看中文字幕不卡| 欧美成人女星排行榜| 亚洲国产精品黑人久久久| 亚洲精品国产无套在线观| 日韩av电影一区| 国产99久久精品| 欧美日韩黄色一区二区| 久久无码av三级| 一区二区在线观看视频| 久久草av在线| 欧美午夜精品电影| 久久综合久久99| 亚洲一区在线观看免费观看电影高清| 美女视频第一区二区三区免费观看网站 | 欧美国产欧美综合| 亚洲国产精品久久久久秋霞影院| 九色porny丨国产精品| 色狠狠一区二区三区香蕉| 日韩欧美123| 一区二区三区免费网站| 国产在线播精品第三| 欧美亚洲一区三区| 国产日韩av一区| 日日摸夜夜添夜夜添精品视频| 成人短视频下载| 日韩精品一区二区三区三区免费| 一区二区三区中文字幕精品精品| 色婷婷综合久久久久中文| 久久久99精品免费观看不卡| 香蕉加勒比综合久久| 日本韩国欧美三级| 国产精品每日更新在线播放网址| 美国欧美日韩国产在线播放| 欧美在线三级电影| 亚洲欧美日韩国产另类专区| 国产成人午夜精品影院观看视频| 555夜色666亚洲国产免| 亚洲自拍偷拍欧美| av电影天堂一区二区在线| 久久久精品免费网站| 青青草成人在线观看| 欧美色视频在线| 亚洲一区二区影院| 欧洲国内综合视频| 一区二区三区免费| 欧美三片在线视频观看 | 678五月天丁香亚洲综合网| 一区二区三区在线观看视频| bt7086福利一区国产| 国产精品久线观看视频| 丁香婷婷综合激情五月色| 久久亚洲精品小早川怜子| 精品在线一区二区| 欧美精品一区二区三区蜜桃视频| 久久国产精品色| 欧美精品一区在线观看| 国产一区二区伦理片| 久久久.com| 成人黄色国产精品网站大全在线免费观看| 精品99一区二区三区| 国产aⅴ综合色| 欧美激情一区三区| 色综合久久久网| 亚洲不卡一区二区三区| 欧美日韩高清一区二区不卡| 肉色丝袜一区二区| 精品国产sm最大网站免费看| 国产91高潮流白浆在线麻豆| 亚洲欧洲在线观看av| 欧美性大战xxxxx久久久| 视频一区二区中文字幕| 欧美精品一区二区三区蜜桃| 成人av网站大全| 亚洲国产乱码最新视频| 精品免费日韩av| 成人av资源在线观看| 亚洲成人动漫一区| www成人在线观看| 一本久道久久综合中文字幕| 天天综合天天做天天综合| 精品国产免费一区二区三区香蕉| 成人av网址在线| 日韩专区在线视频| 久久色中文字幕| 欧美性极品少妇| 国产精品18久久久| 亚洲成年人影院| 欧美国产日韩在线观看| 国产三级欧美三级| 欧美精品日韩一本| 丰满少妇久久久久久久| 亚洲国产视频在线| 日本一区二区三区视频视频| 欧美剧情电影在线观看完整版免费励志电影| 日韩二区在线观看| 综合久久给合久久狠狠狠97色| 欧美一区永久视频免费观看| 99久久777色| 国产美女娇喘av呻吟久久| 亚洲一区二区五区| 国产精品国产三级国产| 日韩视频一区在线观看| 欧美亚洲国产一区二区三区va | 国产亚洲美州欧州综合国| 欧美综合亚洲图片综合区| 丰满放荡岳乱妇91ww| 麻豆精品一区二区综合av| 亚洲综合激情另类小说区| 中文字幕一区在线观看| 久久午夜色播影院免费高清| 欧美一卡二卡在线| 欧美性猛交xxxx乱大交退制版| 99久久精品国产观看| 懂色av一区二区夜夜嗨| 国产精品69毛片高清亚洲| 精品制服美女久久| 日本aⅴ精品一区二区三区 | 亚洲综合色视频| 国产精品久久午夜夜伦鲁鲁| 国产日韩精品久久久| 久久女同精品一区二区| 精品国产亚洲在线| 欧美mv和日韩mv的网站| 日韩精品中文字幕一区| 欧美精品乱人伦久久久久久| 欧美日韩国产精品成人| 在线不卡免费欧美| 91麻豆精品久久久久蜜臀| 欧美日韩黄视频| 欧美色视频在线观看| 欧美精品亚洲一区二区在线播放| 色婷婷av一区二区三区之一色屋| 国产精品18久久久久| 高清免费成人av| 国产福利一区在线| 成人一区二区视频| a美女胸又www黄视频久久| 99视频热这里只有精品免费| 91同城在线观看| 91国产免费看| 欧美一级欧美三级在线观看| 日韩女优毛片在线| 久久久亚洲精品石原莉奈| 制服视频三区第一页精品| 欧美成人免费网站| 国产精品乱人伦| 亚洲精品国产成人久久av盗摄| 亚洲永久精品国产| 久久精品国产77777蜜臀| 国产a久久麻豆| 欧美日韩久久一区| 日韩欧美一级二级| 国产精品拍天天在线| 亚洲一区二区高清| 蜜臀av国产精品久久久久| 粉嫩一区二区三区在线看| 91原创在线视频| 欧美乱妇20p| 久久久影视传媒| 国产女主播在线一区二区| 一区二区三区四区国产精品| 亚洲国产精品欧美一二99| 麻豆91在线看| 欧美大片日本大片免费观看| 欧美国产国产综合| 午夜久久电影网| 国产成人精品亚洲日本在线桃色 | 国产午夜精品一区二区| 中文字幕视频一区| 精品一区二区三区在线播放 | 久久国产欧美日韩精品|