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