SWT 實現靠邊自動隱藏

import java.awt.MouseInfo;

import java.awt.Rectangle;

import java.util.Timer;

import java.util.TimerTask;

 

import org.eclipse.swt.widgets.Display;

import org.eclipse.swt.widgets.Shell;

import org.eclipse.swt.events.DisposeListener;

import org.eclipse.swt.events.DisposeEvent;

 

public class AutoHidden {

private Timer timer = new Timer();

private TimerTask task;

protected Shell shell;

private Display display;

private int pointx;       //鼠標在屏幕中的x座標

private int pointy;       //鼠標在屏幕中的y座標

private Rectangle rect = new Rectangle();     //建立一個矩形存儲窗口的位置

 

/**

 * Launch the application.

 * @param args

 */

public static void main(String[] args) {

try {

AutoHidden window = new AutoHidden();

window.open();

} catch (Exception e) {

e.printStackTrace();

}

}

 

/**

 * Open the window.

 */

public void open() {

display = Display.getDefault();

createContents();

shell.open();

shell.layout();

while (!shell.isDisposed()) {

if (!display.readAndDispatch()) {

display.sleep();

}

}

}

 

/**

 * Create contents of the window.

 */

protected void createContents() {

shell = new Shell();        //置頂

shell.setSize(192, 488);

shell.setText("SWT Application");

shell.setLocation(300, 150);

 

task=new TimerTask(){

public void run() {

while(!shell.isDisposed()){

display.syncExec(new Runnable(){

public void run() {

rect.width = shell.getSize().x;       //矩形的寬度

rect.height = shell.getSize().y;       //矩形的高度

rect.x = shell.getLocation().x;        //矩形左上角的x座標

rect.y = shell.getLocation().y;        //矩形左上角的y座標

java.awt.Point point = MouseInfo.getPointerInfo().getLocation();

pointx = point.x;

pointy = point.y;

if( pointy == 0 && (pointx-rect.x<=shell.getSize().x && pointx-rect.x>=0)){

shell.setVisible(true);

}

if((rect.x-pointx>10 || (pointx-(rect.x+shell.getSize().x)>=10))&&shell.getLocation().y<2){

shell.setVisible(false);

}

if(shell.getLocation().y>2){

shell.setVisible(true);

}

}

});

}

}

};

 

//靠邊自動隱藏

timer.schedule(task,1000,100);

shell.addDisposeListener(new DisposeListener() {

public void widgetDisposed(DisposeEvent arg0) {

if(timer!=null){

timer.cancel();

}

if(task!=null){

task.cancel();

}

System.exit(0);

}

});

}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章