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

📄 edgecreatormanipulator.java

📁 JPowerGraph is a Java library for creating directed graphs for Swing. It supports graph movement, se
💻 JAVA
字号:
package net.sourceforge.jpowergraph.manipulator.edgecreator;

import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.geom.Line2D;

import net.sourceforge.jpowergraph.Node;
import net.sourceforge.jpowergraph.lens.CursorLens;
import net.sourceforge.jpowergraph.manipulator.AbstractManipulator;
import net.sourceforge.jpowergraph.painters.ShapeNodePainter;

/**
 * A manipulator enabling the dragging of the graph
 */
public class EdgeCreatorManipulator extends AbstractManipulator {
    
    public static final String NAME="EdgeCreatorManipulator";

    protected Node m_draggedNode;

    private Line2D draggingLine;
    private CursorLens cursorLens;
    private EdgeCreatorListener edgeCreatorListener;

    public EdgeCreatorManipulator(CursorLens theCursorLens, EdgeCreatorListener theEdgeCreatorListener) {
        this.cursorLens = theCursorLens;
        this.edgeCreatorListener = theEdgeCreatorListener;
    }
    
    public String getName() {
        return NAME;
    }
    
    public boolean isDragging() {
        return m_draggedNode!=null;
    }
    
    public Node getDraggedNode() {
        return m_draggedNode;
    }
    
    public void mousePressed(MouseEvent e) {
        if (m_graphPane.isEnabled() && cursorLens.isCreateEdge() && e.getButton() == MouseEvent.BUTTON1) {
            Point point=e.getPoint();
            m_draggedNode=m_graphPane.getNodeAtPoint(point);
            if (m_draggedNode == null || !edgeCreatorListener.canCreateEdgeFrom(m_draggedNode)) {
                m_draggedNode = null;
                cursorLens.setCursor(CursorLens.stop);
            }
            else{
                cursorLens.setCursor(null);
            }
            e.consume();
        }
    }
    public void mouseReleased(MouseEvent e) {
        if (m_draggedNode!=null) {
            Node overChild = m_graphPane.getNodeAtPoint(e.getPoint());
            boolean canLinkHere = edgeCreatorListener.canCreateEdge(m_draggedNode, overChild);
            if (canLinkHere){
                edgeCreatorListener.createEdge(m_draggedNode, overChild);
            }
        }
        m_draggedNode = null;
        draggingLine = null;
        cursorLens.setCursor(null);
        m_graphPane.repaint();
        e.consume();
    }
    public void mouseDragged(MouseEvent e) {
        if (m_draggedNode!=null) {
            autoscroll(e);
            Node overChild = m_graphPane.getNodeAtPoint(e.getPoint());
            boolean canLinkHere = edgeCreatorListener.canCreateEdge(m_draggedNode, overChild);
            if (!canLinkHere && overChild != null){
                cursorLens.setCursor(CursorLens.stop);
            }
            else{
                cursorLens.setCursor(null);
            }
            
            Point nodeScreenPoint=m_graphPane.getScreenPointForNode(m_draggedNode);
            draggingLine = new Line2D.Double(nodeScreenPoint.getX(), nodeScreenPoint.getY(), e.getPoint().getX(), e.getPoint().getY());
            m_graphPane.repaint();
            e.consume();
        }
        else{
            draggingLine = null;
        }
    }

    public void paint(Graphics2D g) {
        if (draggingLine != null){
            g.setColor(((ShapeNodePainter) m_graphPane.getPainterForNode(m_draggedNode)).getBorderColor());
            g.drawLine((int) draggingLine.getX1(), (int) draggingLine.getY1(), (int) draggingLine.getX2(), (int) draggingLine.getY2());
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -