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

📄 guiview.java

📁 Petri网分析工具PIPE is open-source
💻 JAVA
字号:
package pipe.gui;import java.awt.Component;import java.awt.Cursor;import java.awt.Dimension;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Point;import java.awt.Rectangle;import java.awt.event.MouseEvent;import java.awt.print.PageFormat;import java.awt.print.Printable;import java.awt.print.PrinterException;import java.util.Observable;import java.util.Observer;import javax.swing.JLayeredPane;import javax.swing.event.MouseInputAdapter;import pipe.dataLayer.AnnotationNote;import pipe.dataLayer.Arc;import pipe.dataLayer.ArcPathPoint;import pipe.dataLayer.PetriNetObject;import pipe.dataLayer.Place;import pipe.dataLayer.PlaceTransitionObject;import pipe.dataLayer.Transition;/** * The petrinet is drawn onto this frame. */public class GuiView extends JLayeredPane implements Observer, Constants, Printable {	public boolean netChanged = false;//	public HandlerFactory handlerFactory;	public boolean animationmode = false;//	private PetriNetObject pnObject;//	private boolean draggable = false;	public Arc createArc;	//no longer static  private AnimationHandler animationHandler = new AnimationHandler();		boolean shiftDown = false;		private SelectionObject selection;//######################################################################################  	public GuiView() {		setLayout(null);		setOpaque(true);		setDoubleBuffered(true);		setBackground(ELEMENT_FILL_COLOUR);		// set up the HandlerFactory - we want one per GuiView/model//		handlerFactory = new HandlerFactory(this);				MouseHandler handler = new MouseHandler();				setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));				addMouseListener(handler);		addMouseMotionListener(handler);				selection = new SelectionObject(this);	}//###################################################################################### 	public void addNewPetriNetObject(PetriNetObject newObject) {				if (newObject != null) {						int l =  newObject.getMouseListeners().length;						if (l==0) {				if (newObject instanceof Place) {					PlaceHandler placeHandler = new PlaceHandler(this, (Place)newObject);					newObject.addMouseListener(placeHandler);					newObject.addMouseMotionListener(placeHandler);					add(newObject);					}				else if (newObject instanceof Transition) {//					AnimationHandler animationHandler = new AnimationHandler();					TransitionHandler transitionHandler = new TransitionHandler(this, (Transition)newObject);					newObject.addMouseListener(transitionHandler);					newObject.addMouseMotionListener(transitionHandler);					newObject.addMouseListener(animationHandler);					add(newObject);					}				else if (newObject instanceof Arc) {					add(newObject);					ArcHandler arcHandler = new ArcHandler(this, (Arc)newObject);					newObject.addMouseListener(arcHandler);					newObject.addMouseMotionListener(arcHandler);				}				else if (newObject instanceof AnnotationNote) {					add(newObject);					AnnotationNoteHandler noteHandler =							new AnnotationNoteHandler(this, (AnnotationNote)newObject);					newObject.addMouseListener(noteHandler);					newObject.addMouseMotionListener(noteHandler);										((AnnotationNote)newObject).getNote().addMouseListener(noteHandler);					((AnnotationNote)newObject).getNote().addMouseMotionListener(noteHandler);				}			}		}				repaint();	}//######################################################################################  	public void update(Observable o, Object diffObj) {				if((diffObj instanceof PetriNetObject) && (diffObj != null))		{			if (CreateGui.appGui.getMode() == CREATING)			{				addNewPetriNetObject((PetriNetObject)diffObj);			}			repaint();		} 	}//###################################################################################### 	public int print(Graphics g, PageFormat pageFormat, int pageIndex) throws PrinterException {		if(pageIndex>0)			return Printable.NO_SUCH_PAGE;		Graphics2D g2D = (Graphics2D) g;		//Move origin to page printing area corner		g2D.translate(pageFormat.getImageableX(), pageFormat.getImageableY());    g2D.scale(0.5,0.5);		print(g2D); // Draw the net				return Printable.PAGE_EXISTS;	}//######################################################################################  	/**	 * This method is called whenever the frame is moved, resized etc.	 * It iterates over the existing petrinet objects and repaints them.	 * TODO: write a better description than this since it is now totally not happening.	 */	public void paintComponent(Graphics g) {		super.paintComponent(g);		if (Grid.enabled()) {			Grid.updateSize(this);			Grid.drawGrid(g);		}		selection.updateBounds();	}//######################################################################################    	public void updatePreferredSize() {		// iterate over net objects		// setPreferredSize() accordingly		Component[] components=getComponents();		Dimension d=new Dimension(0,0);		for(int i=0;i<components.length;i++) {			if(components[i] instanceof SelectionObject) continue; // SelectionObject not included			Rectangle r=components[i].getBounds();			int x=r.x+r.width;			int y=r.y+r.height;			if(x>d.width)  d.width =x;			if(y>d.height) d.height=y;		}		setPreferredSize(d);				getParent().validate();	}		//  private void notifyNewDimension(int x,int y) {	//    Dimension d=getPreferredSize();	//    x+=100; // some extra elbow room	//    y+=100;	//    if(d.width <x) d.width =x;	//    if(d.height<y) d.height=y;	//    setPreferredSize(d);	//  }//######################################################################################  	public void changeAnimationMode(boolean status) {		animationmode = status;	}//######################################################################################  	public SelectionObject getSelectionObject() {		return selection;	}//######################################################################################    	public PetriNetObject add(PetriNetObject c)	{		super.add(c);		c.addedToGui();				if (c instanceof ArcPathPoint)			setLayer(c, DEFAULT_LAYER.intValue() + ARC_POINT_LAYER_OFFSET);		else if (c instanceof Arc)			setLayer(c, DEFAULT_LAYER.intValue() + ARC_LAYER_OFFSET);			else if (c instanceof PlaceTransitionObject)			setLayer(c, DEFAULT_LAYER.intValue() + PLACE_TRANSITION_LAYER_OFFSET);		else if (c instanceof AnnotationNote)			setLayer(c, DEFAULT_LAYER.intValue() + ANNOTATION_LAYER_OFFSET);					return c;	}  //######################################################################################  	public void setShiftDown(boolean down){		shiftDown = down;		if (createArc != null) {			createArc.getArcPath().setFinalPointType(shiftDown);			createArc.getArcPath().createPath();		}	}//######################################################################################  	class MouseHandler extends MouseInputAdapter{//######################################################################################    private PetriNetObject pnObject;	public void mousePressed(MouseEvent e){			if (e.getButton() == MouseEvent.BUTTON1) {                Point start = e.getPoint();				switch(CreateGui.getApp().getMode()){				case PLACE:					pnObject = new Place(Grid.getModifiedX(start.x),Grid.getModifiedY(start.y));					CreateGui.getModel().addPetriNetObject(pnObject);					addNewPetriNetObject(pnObject);					break;					        case IMMTRANS:          pnObject = new Transition(Grid.getModifiedX(start.x),Grid.getModifiedY(start.y));          CreateGui.getModel().addPetriNetObject(pnObject);          addNewPetriNetObject(pnObject);          break;        case TIMEDTRANS:          pnObject = new Transition(Grid.getModifiedX(start.x),Grid.getModifiedY(start.y));          ((Transition)pnObject).setTimed(true);          CreateGui.getModel().addPetriNetObject(pnObject);          addNewPetriNetObject(pnObject);          break;                  case ARC:          // Add point to arc in creation          if (createArc != null) {            createArc.setEndPoint(Grid.getModifiedX(e.getX()), Grid.getModifiedY(e.getY()), shiftDown);            createArc.getArcPath().addPoint(Grid.getModifiedX(e.getX()), Grid.getModifiedY(e.getY()), shiftDown);          }          break;                  case ANNOTATION:          	pnObject = new AnnotationNote("", "", Grid.getModifiedX(e.getX()), Grid.getModifiedY(e.getY()));            CreateGui.getModel().addPetriNetObject(pnObject);          	addNewPetriNetObject(pnObject);          	break;		}        updatePreferredSize();	}	}//######################################################################################  		public void mouseMoved(MouseEvent e) {			if (createArc != null) {				createArc.setEndPoint(Grid.getModifiedX(e.getX()), Grid.getModifiedY(e.getY()), shiftDown);			}		}//######################################################################################  	}//######################################################################################  }//######################################################################################  

⌨️ 快捷键说明

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