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

📄 datacanvas.java

📁 ALGAE是一个快速创建算法演示的框架。目前支持的算法实现语言包括java和c
💻 JAVA
字号:
package edu.odu.cs.zeil.AlgAE.Client.DataViewer;import java.awt.*;import java.awt.event.ComponentEvent;import java.awt.event.ComponentListener;import java.awt.event.ComponentAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.util.Enumeration;import edu.odu.cs.zeil.AlgAE.Client.GraphicsInfo;import edu.odu.cs.zeil.AlgAE.Client.MessageDispatcher;import edu.odu.cs.zeil.AlgAE.Client.DataViewer.DataGraph.Graph;import edu.odu.cs.zeil.AlgAE.Client.DataViewer.DataGraph.Node;import edu.odu.cs.zeil.AlgAE.Debug;public class DataCanvas extends Canvas  implements MouseListener, MouseMotionListener{  private Container parent;  private GraphicsInfo graphicsInfo;  private Node nodeBeingDragged;  private Dimension dragOffset;  private MessageDispatcher dispatcher;    public Graph graph;    DataCanvas(Container theParent, MessageDispatcher md)  {    parent = theParent;    dispatcher = md;    dispatcher.getGraphics().setCanvas (this);    graph = new Graph(md);    graphicsInfo = md.getGraphics();    nodeBeingDragged = null;    dragOffset = new Dimension();    setBackground (Color.white);    addMouseListener(this);    addMouseMotionListener(this);  }    void setFontSize (int size)  {    dispatcher.getGraphics().setFontSize (size);  }  public void mousePressed(MouseEvent event)   {    graph.freeze();    parent.requestFocus();        int x = event.getX();    int y = event.getY();        Point dragPos = new Point(x,y);    Enumeration e = graph.nodes();    nodeBeingDragged = null;    while (e.hasMoreElements() && (nodeBeingDragged == null))      {	Node n = (Node)e.nextElement();        if (n.contains(dragPos))	  {	    nodeBeingDragged = n;	    dragOffset.width = n.position().x - x;	    dragOffset.height = n.position().y - y;	    repaint();	  }      }  }    public void mouseExited(MouseEvent event)   {    mouseReleased(event);  }    public void mouseReleased(MouseEvent event)   {    if (nodeBeingDragged != null)      {	int x = event.getX();	int y = event.getY();    	nodeBeingDragged.setPosition	  (new Point(x+dragOffset.width,		     y+dragOffset.height));	nodeBeingDragged = null;        showGraph();      }  }  public void mouseClicked(MouseEvent e) {}  public void mouseEntered(MouseEvent e) {}  void setIncrementSteps (int nSteps)  {      dispatcher.getGraphics().setInterpolation (0, nSteps);  }    void showGraph()  {    dispatcher.requestDisplay();  }    public void mouseMoved(MouseEvent event) {}  public void mouseDragged(MouseEvent event)   {    if (nodeBeingDragged != null)      {	int x = event.getX();	int y = event.getY();    	nodeBeingDragged.setPosition	  (new Point(x+dragOffset.width,		     y+dragOffset.height));      }    repaint();  }    public void paint (Graphics g)   {    Dimension canvasSize = getSize();    if (graphicsInfo.doubleBuffering)      {	if (graphicsInfo.getRepaintImage() == null)	  {	    g.setColor(getBackground());	    g.fillRect(0, 0, canvasSize.width, canvasSize.height);	  }	else	  {	    Debug.show (Debug.graphDraw, "dc.paint canvas size", canvasSize);	    Debug.show (Debug.graphDraw, "dc.paint gi.canvasSize",			graphicsInfo.getCanvasSize());	    if ((graphicsInfo.getCanvasSize().width != canvasSize.width)		|| (graphicsInfo.getCanvasSize().height != canvasSize.height))	      {		g.setColor(getBackground());		g.fillRect(0, 0, canvasSize.width, canvasSize.height);	      }	    Debug.show (Debug.events, "drawing image");	    g.drawImage(graphicsInfo.getRepaintImage(), 0, 0, this);	    Debug.show (Debug.events, "done drawing image");	    if (nodeBeingDragged != null)	      {		g.setColor(Color.black);		Point pos = nodeBeingDragged.position();		Dimension size = nodeBeingDragged.size();		g.drawRect (pos.x, pos.y, size.width, size.height);	    }	  }      }    else      {	g.setColor(getBackground());	g.fillRect(0, 0, canvasSize.width, canvasSize.height);	graph.display (graphicsInfo);      }    dispatcher.painted();  }    public void update (Graphics g)   {    if (graphicsInfo.doubleBuffering)	paint(g);    else      {	Rectangle clipBox = g.getClipRect(); 	graphicsInfo.clip (clipBox);	paint (graphicsInfo.g);	g.drawImage (graphicsInfo.getRepaintImage(),		     clipBox.x, clipBox.y, this);	// buffer.flush();      }  }  public Dimension getPreferredSize() {    return new Dimension (350,200);  }  public  Dimension getMinimumSize() {    return new Dimension (100,100);  }      public  Dimension getMaximumSize() {    return new Dimension (800,600);  }}

⌨️ 快捷键说明

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