📄 selectiontool.java
字号:
package com.sunking.tp.tool;
import javax.swing.*;
//import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import com.sunking.tp.framework.*;
import com.sunking.tp.util.*;
/**
*
* <p>Title: </p>
* <p>Description: 选取工具</p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author <a href="mailto:sunkingxie@hotmail.com">SunKing</a>
* @version 1.0
*/
public class SelectionTool extends AbstractTool {
Component oldC;
Point oldP = new Point(0, 0);
int handleIndex = -1;
Rectangle oldRec;
boolean hasStartEdit=false;
/**
*
* @param desk
*/
public SelectionTool(Desktop desk) {
super(desk);
setToolTip(JTPUtil.getString("SelectionTool_TIP"));
}
/**
*激活工具
*/
public void enabledTool() {
super.enabledTool();
oldC = null;
oldP = new Point(0, 0);
desk.setCursor(Cursor.getDefaultCursor());
}
/**
*灰化工具
*/
public void disabledTool() {
super.disabledTool();
oldC = null;
oldP = new Point(0, 0);
}
public void mouseMoved(MouseEvent e) {}
public void mouseDragged(MouseEvent e) {
if (oldP == null || !SwingUtilities.isLeftMouseButton(e)) { //非左键不处理
return;
}
if (oldC != null) {
Point newP = e.getPoint();
if (handleIndex == -1) {
hasStartEdit = true;
//移动全部组件
JTPComponent selection[] = desk.getSelectionJTPComponent();
for (int index = 0; index < selection.length; index++) {
Component c = ( (Component) selection[index]);
c.setLocation(c.getX() + (newP.x - oldP.x),
c.getY() + (newP.y - oldP.y));
}
oldP = newP;
} else {
hasStartEdit = true;
//拖动图柄改变组件大小
( (JTPComponent) oldC).moveHandle(handleIndex, oldRec,
newP.x - oldP.x,
newP.y - oldP.y);
}
desk.fireAssoicatorChanged(); //repaint assoicator line;
} else {
hasStartEdit = false;
//拉框多选组件
int x = e.getX(), y = e.getY(), m = (int) oldP.getX(),
n = (int) oldP.getY();
int tmp = 0;
if (x < m) {
tmp = x;
x = m;
m = tmp;
}
if (y < n) {
tmp = y;
y = n;
n = tmp;
}
desk.mouseSelect(new Rectangle(m, n, x - m, y - n));
}
}
public void mouseReleased(MouseEvent e) {
if(hasStartEdit){
UndoableEditFactory.getDefault().stopEdit(null);
}
hasStartEdit = false;
oldP = new Point(0, 0);
oldC = null;
desk.setCursor(Cursor.getDefaultCursor());
desk.mouseSelect( (Rectangle)null);
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
public void mousePressed(MouseEvent e) {
if ( (e.getModifiers() & InputEvent.CTRL_MASK) == 0) { //按CTRL键多选
desk.clearSelection();
}
oldP = e.getPoint();
desk.mouseSelect(e.getPoint());
oldC = (Component) desk.getJTPComponent(e.getPoint());
if (oldC != null) {
Point p = SwingUtilities.convertPoint( (Component) desk,
e.getPoint(), oldC);
handleIndex = ( (JTPComponent) oldC).getHandle(p);
if (handleIndex != -1) {
desk.setCursor( ( (JTPComponent) oldC).getAdjustCursor(
handleIndex));
UndoableEditFactory.getDefault().startEdit(
UndoableEditFactory.ADJUST, desk, oldC);
} else {
desk.setCursor(new Cursor(Cursor.HAND_CURSOR));
JTPComponent selection[] = desk.getSelectionJTPComponent();
UndoableEditFactory.getDefault().startEdit(
UndoableEditFactory.DRAG, desk, selection);
}
oldRec = oldC.getBounds();
} else {
desk.setCursor(Cursor.getDefaultCursor());
}
//右键弹出菜单
if (SwingUtilities.isRightMouseButton(e)) {
JTPComponent selection[] = desk.getSelectionJTPComponent();
if (selection == null || selection.length == 0) {
return;
}
JPopupMenu popup = desk.getJTPMenuFactory().getPopup(selection);
if (popup != null) {
popup.show( ( (Component) desk), e.getX(), e.getY());
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -