⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dsdesktopselectevent.java

📁 用JAVA编写的绘图程序 功能简介: 支持存储
💻 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 + -