?? dsdesktopselectevent.java
字號:
package drawsmart.itsv.swing;
import drawsmart.itsv.tool.DSMouseEvent;
import drawsmart.itsv.framework.*;
import java.awt.event.MouseEvent;
import javax.swing.*;
import java.awt.Cursor;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.*;
import java.util.ArrayList;
/**
* <p>Title: 桌面選擇類</p>
* <p>Description: 用于選擇組件和移動組件,放大/縮小組件</p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author 崔江
* @version 2.0
*/
public class DSDesktopSelectEvent extends DSMouseEvent
{
//選中的組件
JDSComponentface[] jDSComponentfacesAll=null;
//
JDSComponentface jDSComponentface=null;
//選中的直線
JDSLineface jDSLineface=null;
DSExtendJPopupMenu dSExtendJPopupMenu=null;
//
Point p;
//按住CTRL鍵的選擇
ArrayList arrayListSelectCtrl=new ArrayList();
//點擊句柄索引數
int isHandle=-1;
//
private Point starPoint;
//計算是否在選中的組件內
boolean selectbool=false;
/**
* 構造器
* @param desk 桌面接口
* @param imageIcon 圖標
*/
public DSDesktopSelectEvent(JDSDesktopface desk,ImageIcon imageIcon,DSExtendJPopupMenu dSExtendJPopupMenu)
{
//
super(desk);
//設置圖標
setImageIcon(imageIcon);
//
this.dSExtendJPopupMenu=dSExtendJPopupMenu;
}
/**
* 鼠標壓下事件
* @param e
*/
public void mousePressed(MouseEvent e)
{
jDSComponentfacesAll=getJDSDesktopface().getSelectComponentface();
//計算是否在選中的組件內
if(getJDSDesktopface().getSelectComponentface()!=null && getJDSDesktopface().getSelectComponentface().length>1)
{
selectbool=false;
for (int q = 0; q < getJDSDesktopface().getSelectComponentface().length;q++) {
boolean bool=getJDSDesktopface().getSelectComponentface()[q].contains(e.getPoint());
if(bool)
{
selectbool=true;
break;
}
}
}
else
{
selectbool=false;
}
//計算是否選中直線
JDSLineface[] jDSLinefacethiss=getJDSDesktopface().getJDSAllLineface();
for(int i=0;i<jDSLinefacethiss.length;i++)
{
boolean bool=jDSLinefacethiss[i].containPoint(e.getPoint());
if(bool==true) break;
}
//
starPoint=e.getPoint();
if (( (e.getModifiers() & InputEvent.BUTTON1_MASK ) != 0) && (e.getModifiers() & KeyEvent.CTRL_MASK )== 0) {
p = e.getPoint();
//請空Ctrl
arrayListSelectCtrl.clear();
if(getJDSDesktopface().getSelectComponentface()!=null && getJDSDesktopface().getSelectComponentface().length>1 && selectbool==true) return;
//只查詢組件
jDSComponentface = getJDSDesktopface().getJDSComponent(e.getPoint());
//如果沒有選中的組件則全部改為false
if (jDSComponentface == null) {
jDSComponentfacesAll=null;
JDSComponentface[] jDSComponentfaces = getJDSDesktopface().
getJDSAllComponent();
for (int i = 0; i < jDSComponentfaces.length; i++) {
jDSComponentfaces[i].setIsSelect(false);
}
}
//否則把不等于本身的改為false
else {
jDSComponentfacesAll=null;
arrayListSelectCtrl.add(jDSComponentface);
JDSComponentface[] jDSComponentfaces = getJDSDesktopface().
getJDSAllComponent();
for (int i = 0; i < jDSComponentfaces.length; i++) {
if (jDSComponentface != jDSComponentfaces[i]) {
jDSComponentfaces[i].setIsSelect(false);
}
}
}
//設置選擇狀態
if (jDSComponentface != null)
{
jDSComponentface.setIsSelect(true);
}
//判斷是否在句柄中
if (jDSComponentface != null)
isHandle = jDSComponentface.getHandle(e.getPoint());
//刷新桌面
getJDSDesktopface().repaint();
}
//CTRL的復選方式
else if(( (e.getModifiers() & InputEvent.BUTTON1_MASK ) != 0) && (e.getModifiers() & KeyEvent.CTRL_MASK )!= 0)
{
p = e.getPoint();
//只查詢組件
jDSComponentface=null;
JDSComponentface jDSComponentfaceCTRL = getJDSDesktopface().getJDSComponent(e.getPoint());
if(jDSComponentfaceCTRL==null) return;
//請空Ctrl
//arrayListSelectCtrl.clear();
//if(getJDSDesktopface().getSelectComponentface()!=null && getJDSDesktopface().getSelectComponentface().length>1) return;
//與已選中的組件同步
if(jDSComponentfacesAll!=null && jDSComponentfacesAll.length>0)
{
arrayListSelectCtrl.clear();
for(int k=0;k<jDSComponentfacesAll.length;k++)
{
arrayListSelectCtrl.add(jDSComponentfacesAll[k]);
}
}
//
//否則把不等于本身的改為false
if(jDSComponentfaceCTRL!=null)
{
if(selectbool==false)
{
arrayListSelectCtrl.add(jDSComponentfaceCTRL);
}
//取消選中的狀態
else
{
for(int k2=0;k2<arrayListSelectCtrl.size();k2++)
{
JDSComponentface jDSComponentfaceClear=(JDSComponentface)arrayListSelectCtrl.get(k2);
if(jDSComponentfaceClear==jDSComponentfaceCTRL)
{
arrayListSelectCtrl.remove(k2);
}
}
}
}
//生成已選中的組件數組
jDSComponentfacesAll=(JDSComponentface[])arrayListSelectCtrl.toArray(new JDSComponentface[0]);
//設置選擇狀態
if (jDSComponentfaceCTRL != null)
{
jDSComponentfaceCTRL.setIsSelect(!jDSComponentfaceCTRL.getIsSelect());
}
//判斷是否在句柄中
if (jDSComponentfaceCTRL != null)
isHandle = jDSComponentfaceCTRL.getHandle(e.getPoint());
//刷新桌面
getJDSDesktopface().repaint();
}
//顯示右鍵菜單
else if ( (e.getModifiers() & InputEvent.BUTTON3_MASK) != 0) {
p = e.getPoint();
jDSComponentfacesAll=null;
//只查詢組件
jDSComponentface = getJDSDesktopface().getJDSComponent(e.getPoint());
//如果沒有選中的組件則全部改為false
if (jDSComponentface == null) {
JDSComponentface[] jDSComponentfaces = getJDSDesktopface().
getJDSAllComponent();
for (int i = 0; i < jDSComponentfaces.length; i++) {
jDSComponentfaces[i].setIsSelect(false);
}
}
//否則把不等于本身的改為false
else {
JDSComponentface[] jDSComponentfaces = getJDSDesktopface().
getJDSAllComponent();
for (int i = 0; i < jDSComponentfaces.length; i++) {
if (jDSComponentface != jDSComponentfaces[i]) {
jDSComponentfaces[i].setIsSelect(false);
}
}
}
//設置選擇狀態
if (jDSComponentface != null)
{
jDSComponentface.setIsSelect(true);
}
//初始化右鍵菜單只查詢組件
JDSComponentface jDSComponentfacePopup = getJDSDesktopface().
getJDSComponent(e.getPoint());
if (jDSComponentfacePopup == null)return;
dSExtendJPopupMenu.setFace(jDSComponentfacePopup, jDSDesktopface);
//
//顯示右鍵菜單
dSExtendJPopupMenu.show(e.getComponent(), e.getX(), e.getY());
}
}
/**
* 返回鼠標樣式
* @return
*/
public Cursor getCursor() {
return new Cursor(Cursor.DEFAULT_CURSOR);
}
/**
* 鼠標拖拽事件
* @param e
*/
public void mouseDragged(MouseEvent e) {
//System.out.println(jDSComponentface);
if(jDSComponentface!=null)
{
//判斷是移動組件,還是拖動句柄
if(isHandle==-1)
{
//不在句柄中
jDSComponentface.setPlaceComponent(p,e.getPoint());
}
else
{
//在句柄中
jDSComponentface.moveHandle(isHandle,jDSComponentface.getRectSize(),(int)(e.getX()-p.getX()),(int)(e.getY()-p.getY()));
}
}
//移動多個組件
else if(getJDSDesktopface().getSelectComponentface()!=null && getJDSDesktopface().getSelectComponentface().length>1 && selectbool==true && (e.getModifiers() & KeyEvent.CTRL_MASK )== 0)
{
for(int q=0;q<getJDSDesktopface().getSelectComponentface().length;q++)
{
getJDSDesktopface().getSelectComponentface()[q].setPlaceComponent(p,e.getPoint());
}
}
//多選
else
{
//拉框多選組件
int x = e.getX(), y = e.getY(), m = (int) starPoint.getX(),
n = (int) starPoint.getY();
int tmp = 0;
if (x < m) {
tmp = x;
x = m;
m = tmp;
}
if (y < n) {
tmp = y;
y = n;
n = tmp;
}
Rectangle rect=new Rectangle(m, n, x - m, y - n);
JDSComponentface[] jDSComponentfaces=getJDSDesktopface().getJDSAllComponent();
ArrayList arrayList=new ArrayList();
//arrayList.clear();
if(jDSComponentfacesAll!=null)
{
for(int k=0;k<jDSComponentfacesAll.length;k++)
{
arrayList.add(jDSComponentfacesAll[k]);
}
}
for(int k=0;k<jDSComponentfaces.length;k++)
{
if(jDSComponentfaces[k].intersects(rect))
{
//判斷是否包含在已有的組件中
boolean boolAll=true;
if(jDSComponentfacesAll!=null)
{
for (int k2 = 0; k2 < jDSComponentfacesAll.length; k2++) {
if (jDSComponentfaces[k] == jDSComponentfacesAll[k2]) {
boolAll = false;
break;
}
}
}
if(boolAll==true)
{
jDSComponentfaces[k].setIsSelect(true);
arrayList.add(jDSComponentfaces[k]);
}
}
else {
if((e.getModifiers() & KeyEvent.CTRL_MASK )== 0)
jDSComponentfaces[k].setIsSelect(false);
}
}
//生成已選中的組件數組
jDSComponentfacesAll=(JDSComponentface[])arrayList.toArray(new JDSComponentface[0]);
//顯示選擇框
getJDSDesktopface().setSelectRect(rect);
}
//刷新桌面
getJDSDesktopface().repaint();
p=e.getPoint();
}
/**
* 鼠標彈起事件
* @param e
*/
public void mouseReleased(MouseEvent e) {
if(jDSComponentfacesAll==null && jDSComponentface==null)
{
getJDSDesktopface().setSelectComponentface(null);
JDSComponentface[] jDSComponentfaceAll=getJDSDesktopface().getJDSAllComponent();
for(int k=0;k<jDSComponentfaceAll.length;k++)
{
jDSComponentfaceAll[k].setIsSelect(false);
}
//記錄歷史
//getJDSDesktopface().addUnReList();
}
else if(jDSComponentfacesAll!=null && jDSComponentface==null)
{
getJDSDesktopface().setSelectComponentface(jDSComponentfacesAll);
//記錄歷史
//getJDSDesktopface().addUnReList();
}
else if (jDSComponentfacesAll == null && jDSComponentface != null)
{
jDSComponentfacesAll = new JDSComponentface[1];
jDSComponentfacesAll[0] =jDSComponentface;
getJDSDesktopface().setSelectComponentface(jDSComponentfacesAll);
//記錄歷史
//getJDSDesktopface().addUnReList();
}
getJDSDesktopface().setSelectRect(null);
//jDSComponentface=null;
//jDSComponentfacesAll=null;
isHandle=-1;
// starPoint=null;
// p=null;
//刷新桌面
getJDSDesktopface().repaint();
}
/**
* 鼠標移動事件
* @param e MouseEvent
*/
public void mouseMoved(MouseEvent e)
{
//System.out.println(jDSComponentface);
if (getJDSDesktopface().getSelectComponentface()!=null && getJDSDesktopface().getSelectComponentface().length==1)
{
JDSComponentface jDSComponentfaceOne=getJDSDesktopface().getSelectComponentface()[0];
isHandle = jDSComponentfaceOne.getHandle(e.getPoint());
//System.out.println(isHandle);
if (isHandle == 1 || isHandle==6) {
jDSDesktopface.setMouseSyle(new Cursor(Cursor.S_RESIZE_CURSOR ));
}
else if(isHandle==3 || isHandle==4)
{
jDSDesktopface.setMouseSyle(new Cursor(Cursor.W_RESIZE_CURSOR ));
}
else if(isHandle==2)
{
jDSDesktopface.setMouseSyle(new Cursor(Cursor.NE_RESIZE_CURSOR));
}
else if(isHandle==0)
{
jDSDesktopface.setMouseSyle(new Cursor(Cursor.NW_RESIZE_CURSOR));
}
else if(isHandle==5)
{
jDSDesktopface.setMouseSyle(new Cursor(Cursor.SW_RESIZE_CURSOR));
}
else if(isHandle==7)
{
jDSDesktopface.setMouseSyle(new Cursor(Cursor.SE_RESIZE_CURSOR));
}
else if(isHandle==-1) {
jDSDesktopface.setMouseSyle(new Cursor(Cursor.DEFAULT_CURSOR));
}
}
else {
jDSDesktopface.setMouseSyle(new Cursor(Cursor.DEFAULT_CURSOR));
}
}
//鼠標單擊事件
public void mouseClicked(MouseEvent e)
{
JDSLineface[] jDSLinefacethiss=getJDSDesktopface().getJDSAllLineface();
for(int i=0;i<jDSLinefacethiss.length;i++)
{
boolean bool=jDSLinefacethiss[i].containPoint(e.getPoint());
if(bool==true) break;
}
getJDSDesktopface().repaint();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -