📄 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 + -