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