📄 associatetool.java
字号:
package com.sunking.tp.tool;import java.awt.*;import java.awt.event.*;import javax.swing.event.*;import javax.swing.*;import java.awt.geom.*;import com.sunking.tp.framework.*;/** * * <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 AssociateTool extends AbstractTool { /** *画虚线用的Stroke */ BasicStroke stroke=new BasicStroke(1.0f,BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND,140.0f,new float[]{1.0f},150.0f); Line2D oldLine; /** *连线源 */ JTPComponent source=null; /** *连线类型 */ int assoicateType; /** * @param desk 所属绘图桌面 * @param assoicateType 连线类型 * @param icon 图标 */ public AssociateTool(Desktop desk,int assoicateType,Icon icon) { super(desk); this.assoicateType = assoicateType; setToolTip("Create association."); setIcon(icon); } /** *启动工具 */ public void enabledTool() { super.enabledTool(); source = null; oldLine = null; } /** *弃用工具 */ public void disabledTool() { super.disabledTool(); source = null; oldLine = null; } public void mouseDragged(MouseEvent e){} public void mouseClicked(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) { //设置起点和终点 JTPComponent dest = desk.getJTPComponent(e.getPoint()); if(dest != null){ if(source == null){ source = dest; source.setSelect(true); Component cSource = (Component)source; oldLine = new Line2D.Float(); int x=cSource.getX()+(cSource.getWidth()/2); int y=cSource.getY()+(cSource.getHeight()/2); oldLine.setLine(x,y,x,y); }else{ if(source != e.getSource()){ source.addAssociator(dest,assoicateType); source.setSelect(false); source = null; oldLine=null; desk.fireAssoicatorChanged(); } } desk.mouseSelect(e.getPoint()); }else if(e.getSource() instanceof Desktop){ if(source != null){ source.setSelect(false); source = null; } desk.mouseSelect(e.getPoint()); ((Container)desk).repaint(); } } Component getDesktopPane(Component c){ if(c instanceof Desktop) return c; c = c.getParent(); if(c == null) return null; return getDesktopPane(c); } public void mouseMoved(MouseEvent e){ if(oldLine == null) return; int x=e.getX(),y=e.getY(); //画虚线 Component desktop = getDesktopPane(e.getComponent()); Graphics2D g2=(Graphics2D)(desktop.getGraphics()); g2.setStroke(stroke); g2.setXORMode(desktop.getBackground()); if(oldLine!=null){ g2.drawLine((int)oldLine.getX1(),(int)oldLine.getY1(), (int)oldLine.getX2(),(int)oldLine.getY2()); } oldLine.setLine(oldLine.getX1(),oldLine.getY1(),e.getX(),e.getY()); g2.drawLine((int)oldLine.getX1(),(int)oldLine.getY1(), (int)oldLine.getX2(),(int)oldLine.getY2()); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -