亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? drawcanvas.java

?? 用Java開發的、實現類似Visio功能的應用程序源碼
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/**
 *    $Id:DrawCanvas.java $
 *
 *    Copyright 2004 ~ 2005  JingFei International Cooperation LTD. All rights reserved. *
 */
package com.jfimagine.jfdraw.gui;

import java.util.Iterator;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.event.ActionEvent;



import javax.swing.JPanel;
import javax.swing.Scrollable;
import javax.swing.SwingConstants;   
import javax.swing.JScrollPane;

import com.jfimagine.jfgraph.shape.union.JFPage;
import com.jfimagine.jfgraph.shape.base.ShapeConst;
import com.jfimagine.jfgraph.shape.base.AbstractShape;
import com.jfimagine.jfgraph.shape.base.ObjectList;
import com.jfimagine.jfgraph.shape.action.JFOperationManager;

import com.jfimagine.jfgraph.shape.line.JFQuadrant;
import com.jfimagine.jfgraph.shape.union.JFLayer;

import com.jfimagine.jfgraph.shape.decorate.GridFormat;
import com.jfimagine.jfgraph.shape.decorate.FontFormat;
import com.jfimagine.jfgraph.shape.decorate.LineFormat;  
import com.jfimagine.jfgraph.shape.decorate.CanvasFormat;

import java.awt.print.PageFormat;
import com.jfimagine.jfgraph.shape.decorate.JFPageFormat;

import com.jfimagine.jfgraph.geom.GeomConst;
import com.jfimagine.jfgraph.geom.Rect;
import com.jfimagine.jfgraph.geom.JFPoint;
import com.jfimagine.jfgraph.geom.JFPoint;

import com.jfimagine.jfdraw.draw.DrawState;
import com.jfimagine.jfdraw.draw.AbstractDrawEvent;
import com.jfimagine.jfdraw.draw.EventDispatcher;
import com.jfimagine.jfdraw.draw.DrawConst;
import com.jfimagine.jfdraw.draw.Selection;

import com.jfimagine.jfdraw.gui.GlobalSettings;




 /**
 * Drawing canvas class. A main drawing canvas used to draw or show graphs.
 *
 * @author     CookieMaker    
 *
 * @version $Revision: 1.3.0 $
 */ 
public class DrawCanvas extends JPanel  
			implements Scrollable,MouseListener,MouseMotionListener,KeyListener {

    /** for scrolling increment. */
    private double m_maxUnitIncrement = 1;

    private boolean m_isMetric  =true;
    
    /** for event processing.*/
    private EventDispatcher m_eventDispatcher;
    
    /** current draw state.*/
    private DrawState	m_drawState;

    /** A CAD page for each canvas.*/
    private JFPage m_page=new JFPage(); 
    
    /** An operation manager for undo and redo */
    private JFOperationManager m_operationManager = new JFOperationManager(m_page);

    /** A CAD selection for current shape objects.*/
    private Selection m_selection=new Selection(this);
    
    /** Last mouse position on this canvas.*/
    private JFPoint m_lastMousePos	=new JFPoint();
    
    /** grid of this canvas.*/
    private GridFormat m_gridFormat	=new GridFormat();
    
    /** zoom scale.*/
    private double m_zoomScale		=1.0;

    /** original canvas dimension.*/
    private Dimension m_originalSize	=new Dimension();
    
    /** parent draw pane */
    private DrawPane m_parentDrawPane;
    
    /** if hide grids */
    private boolean m_hideGrids	=false;

    /** if hide popup menus */
    private boolean m_hidePopupMenus	=false;

    /** if use page bounds to restrict drawing*/
    private boolean m_usePageBounds	=true;   
    
    /** graph file name **/
    private String m_fileName		=""; 
    
    /** background color for drawing canvas */
    private Color m_backgroundColor	=Color.white;   
    
    /** if current drawing canvas is under a reversed color */
    private boolean m_isReverse	=false;
   
    /** 
     *  Constructor
     *  @param maxIncrement A max increment unit for scrolling.
     */ 
    public DrawCanvas(DrawAdapter drawAdapter,double maxUnitIncrement) {
	
	setLayout(new java.awt.BorderLayout());
	
	if (drawAdapter!=null && drawAdapter instanceof DrawPane){
		m_parentDrawPane	=(DrawPane)drawAdapter;
	}
                
        m_drawState	=new DrawState();
	m_drawState.setDrawState(DrawConst.DRAWSTATE_NONE,ShapeConst.SHAPETYPE_NONE); 

        m_eventDispatcher	=new EventDispatcher(drawAdapter,this);

	
        setOpaque(true);
        setBackground(m_backgroundColor);
        m_maxUnitIncrement = maxUnitIncrement;

        //Let the user scroll by dragging to outside the window.
        setAutoscrolls(true); //enable synthetic drag events
        addMouseListener(this); //handle mouse events(e.g. click, press,release)
        addMouseMotionListener(this); //handle mouse events(e.g. move, drag)
        addKeyListener(this);//handle key events
        
        GlobalSettings settings	=GlobalSettings.getInstance();
        m_gridFormat.setIsMetric(settings.isMetric()); 
        m_page.setIsMetric(settings.isMetric());  
        
	//copy global settings to page settings
        m_page.setHidePorts(settings.isHidePorts());
        m_page.setDisablePortSnapping(settings.isDisablePortSnapping());
        m_page.setScaleValue(settings.getScaleValue());
        m_page.setScaleUnit(settings.getScaleUnit());
        m_page.setScreenUnit(settings.getScreenUnit()); 

    } 

    public boolean isMetric() {
        return m_isMetric;
    }

    public void setIsMetric(boolean isMetric) {
        this.m_isMetric = isMetric;
	
	//set gridformat to metric/english        
        getGridFormat().setIsMetric(isMetric);
	//set draw page to metric/english.        
        getDrawPage().setIsMetric(isMetric);
    }

    /** if hide grids now */	
    public boolean isHideGrids(){
	return m_hideGrids;
    }
    /** set if hide grids */
    public void setHideGrids(boolean hideGrids){
    	m_hideGrids	=hideGrids;
    }

    /** if hide popupmenus  now */	
    public boolean isHidePopupMenus(){
	return m_hidePopupMenus;
    }
    /** set if hide popupmenus */
    public void setHidePopupMenus(boolean hidePopupMenus){
    	m_hidePopupMenus	=hidePopupMenus;
    }

    /** if use page bounds(or the bounds of a canvas format) to restrict drawing */	
    public boolean isUsePageBounds(){
	return m_usePageBounds;
    }
    /** set if use page bounds(or the bounds of a canvas format) to restrict drawing */
    public void setUsePageBounds(boolean usePageBounds){
    	m_usePageBounds	=usePageBounds;
    }


    /** get the background color for drawing canvas 
     *  @return the background color
     */
    public Color getBackgroundColor(){
    	return m_backgroundColor;
    }
    
    /** set the background color for drawing canvas 
     *  @param A new background color for drawing canvas
     */
    public void setBackgroundColor(Color color){
    	if (color!=null)
    		m_backgroundColor	=new Color(color.getRGB());
    }

    /** get if current current drawing canvas is under a reverse color.
     *  @return True if is reversed, false otherwise.
     */
    public boolean isReverse(){
    	return m_isReverse;
    }
    
    /** set if current current drawing canvas is under a reverse color.
     *  @param reverse True if is reversed, false otherwise.
     */
    public void setReverse(boolean reverse){
    	  m_isReverse	=reverse;
    	  
    	  if (reverse){
    	  	setBackgroundColor(Color.black);
    	  	FontFormat.getDefaultFontFormat().setFontColor(Color.white);
    	  	LineFormat.getDefaultLineFormat().setLineColor(Color.white);
    	  }else{
    	  	setBackgroundColor(Color.white);
    	  	FontFormat.getDefaultFontFormat().setFontColor(Color.black);
    	  	LineFormat.getDefaultLineFormat().setLineColor(Color.black);
    	  }
    	
    }


    /** get graph file name */
    public String getFileName(){
    	return m_fileName;
    }	

    /** set graph file name */
    public void setFileName(String fileName){
    	m_fileName	=fileName;
    }	


    /** get current grid format
     *  @return the grid format.
     */	
    public GridFormat getGridFormat(){
    	return m_gridFormat;
    }

    /** get zoom scale
     *  @return the zoom scale
     */	
    public double getZoomScale(){
    	return m_zoomScale;
    }

    /** set zoom scale
     *  @param zoomScale A new zoom scale.
     */	
    public void setZoomScale(double zoomScale){

    	clearCanvas(null);
    	
    	if (zoomScale<0.25) zoomScale	=0.25;
    	
    	m_zoomScale	=zoomScale;
    	if (m_page.getZoomScale()!=zoomScale){
    		m_page.setZoomScale(zoomScale);
    	}
    	m_drawState.setZoomScale(zoomScale);
    	GeomConst.setZoom(zoomScale);
    	
    	Dimension d	=new Dimension((int)(m_originalSize.getWidth() * m_zoomScale),(int)(m_originalSize.getHeight() * m_zoomScale));
    	setPreferredSize(d);
    	setSize(d);
    	
    	if (m_parentDrawPane!=null)
    		m_parentDrawPane.setZoomScale(zoomScale);
    }
	
    /** 
     *  get view center of this canvas
     *  @return the center point of the view rectangle of this canvas
     */	
   public JFPoint getViewCenter(){

	double x	=0;
	double y	=0;
        double width	=0;
        double height	=0;

	DrawPane pane	=getParentDrawPane();
   	if (!pane.isHideScrollbars()){
   		JScrollPane	scrollPane	=getParentDrawPane().getScrollPane();
   		//view rectangle
   	        Rectangle	viewRect	=scrollPane.getViewport().getViewRect();
	
		x	=viewRect.getX()/m_zoomScale;
		y	=viewRect.getY()/m_zoomScale;
        	width	=viewRect.getWidth()/m_zoomScale;
        	height	=viewRect.getHeight()/m_zoomScale;
        }else{
        	Dimension	d		=getSize();
        	x	=0;
        	y	=0;
        	width	=d.getWidth()/m_zoomScale;
        	height	=d.getHeight()/m_zoomScale;
	}
        
        //actual page size
        double pageWidth	=m_page.getPageFormat().getWidth();
        double pageHeight	=m_page.getPageFormat().getHeight();
        
        //width different if the view rect exceed the actual page size.
        double widthDiff	=x+width-pageWidth*JFPageFormat.INCH_SCREEN/JFPageFormat.INCH;
        double heightDiff	=y+height-pageHeight*JFPageFormat.INCH_SCREEN/JFPageFormat.INCH; 
        
        
        if (widthDiff>0){
        	width	-=widthDiff;
        	if (width<0) width=0;
	}
	if (heightDiff>0){
		height	-=heightDiff;
		if (height<0) height=0;
	}
        
        return new JFPoint(x+width/2,y+height/2);
   }


    /** get original size
     *  @return the original size
     */	
    public Dimension getOriginalSize(){
    	return m_originalSize;
    }

    /** set original size
     *  @param originalSize A new original size.
     */	
    public void setOriginalSize(Dimension originalSize){
    	m_originalSize.setSize(originalSize);
    	setPreferredSize(new Dimension((int)(m_originalSize.getWidth() * m_zoomScale),(int)(m_originalSize.getHeight() * m_zoomScale)));
    }

    
    /** get current draw state*/	
    public DrawState getDrawState(){
    	return m_drawState;
    }

    /** set current draw state
     *  @param drawState A new draw state.
     */	
    public void setDrawState(DrawState drawState){
    	m_drawState	=new DrawState(drawState);
    }

    /** set parent draw pane
     *  @param drawPane a new parent drawPane
     */	
    public void setParentDrawPane(DrawPane drawPane){
    	m_parentDrawPane	=drawPane;
    }

    /** get parent draw pane
     *  @return the parent draw pane of this draw canvas.
     */	
    public DrawPane getParentDrawPane(){
    	return m_parentDrawPane;
    }


    /** get last mouse position on this canvas.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
香蕉成人伊视频在线观看| 99精品在线免费| 国内国产精品久久| 成人动漫一区二区在线| 欧美高清一级片在线| 国产精品美女www爽爽爽| 日韩国产精品久久| av在线不卡网| 欧美xxxx在线观看| 亚洲国产一二三| 99视频一区二区| 精品国产伦一区二区三区观看体验 | 日韩精品一级二级| bt欧美亚洲午夜电影天堂| 日韩欧美亚洲国产精品字幕久久久 | 7777精品伊人久久久大香线蕉的 | 成人av中文字幕| 久久亚洲一级片| 裸体一区二区三区| 91豆麻精品91久久久久久| 中文字幕日韩精品一区 | 亚洲成人综合在线| 色噜噜狠狠成人网p站| 欧美国产精品v| 国产盗摄一区二区| 久久久久久黄色| 国精产品一区一区三区mba桃花| 欧美一区二区福利在线| 亚洲第一激情av| 欧美日韩专区在线| 亚洲福中文字幕伊人影院| 91色婷婷久久久久合中文| 国产精品免费丝袜| 99久久免费视频.com| 亚洲欧洲精品成人久久奇米网| 国产91精品一区二区麻豆网站| 欧美精品一区二区三区在线| 韩国在线一区二区| 26uuu另类欧美| 国产成人免费在线| 中文字幕一区二区三中文字幕| 北岛玲一区二区三区四区| 国产精品美女久久久久久久| 91啪亚洲精品| 亚洲最色的网站| 欧美一区二区三区日韩| 裸体歌舞表演一区二区| 精品免费视频.| 成人h动漫精品| 一区二区三区在线视频免费| 在线不卡中文字幕播放| 免费高清在线一区| 国产欧美视频在线观看| 色综合中文字幕国产 | 99久久综合精品| 亚洲精品亚洲人成人网 | 亚洲一卡二卡三卡四卡无卡久久| 欧美在线免费播放| 日本不卡一二三| 欧美激情在线看| 91网站视频在线观看| 亚洲香肠在线观看| 精品精品国产高清a毛片牛牛| 国产成人日日夜夜| 伊人开心综合网| 日韩欧美成人一区| av中文字幕不卡| 免费日韩伦理电影| 国产精品视频你懂的| 8x8x8国产精品| 国产在线播放一区三区四| 国产亚洲成av人在线观看导航| 在线精品视频小说1| 国产乱子伦一区二区三区国色天香| 国产精品国产成人国产三级 | 丰满少妇久久久久久久| 亚洲午夜电影在线| 国产欧美日韩另类一区| 欧美日韩三级在线| 成人一区二区三区| 人人超碰91尤物精品国产| 亚洲欧美另类图片小说| 欧美一二三区精品| 色婷婷国产精品久久包臀| 久久精品国产网站| 亚洲一区在线电影| 国产网红主播福利一区二区| 91精品国产综合久久久蜜臀图片| 高清av一区二区| 裸体在线国模精品偷拍| 亚洲电影中文字幕在线观看| 国产精品免费久久| 久久欧美中文字幕| 欧美一区二区三区免费大片 | 欧美精品xxxxbbbb| av中文字幕不卡| 国产成人精品影视| 精品亚洲aⅴ乱码一区二区三区| 亚洲国产精品久久久久秋霞影院| 精品国产凹凸成av人导航| 久久久久久电影| 精品捆绑美女sm三区| 欧美精品欧美精品系列| 在线观看区一区二| 91女人视频在线观看| 99精品国产99久久久久久白柏| 国产剧情一区在线| 国产综合久久久久影院| 日韩1区2区日韩1区2区| 亚洲一区二区三区小说| 一区二区三区精品视频| 中文字幕在线视频一区| 国产日韩欧美高清在线| 欧美一区二区黄色| 亚洲欧洲国产日韩| 欧美成人猛片aaaaaaa| 久久影院电视剧免费观看| 日韩黄色小视频| 国产精品乱子久久久久| 欧美韩国一区二区| 久久精品一区二区三区av| 久久网站热最新地址| 日韩精品一区二区三区中文不卡| 欧美一区二区性放荡片| 日韩一区二区三免费高清| 精品久久国产97色综合| 久久综合狠狠综合久久综合88| 国产日韩欧美一区二区三区乱码 | 奇米色一区二区| 日韩精品一卡二卡三卡四卡无卡 | 亚洲男人的天堂在线aⅴ视频| 国产精品久久久久久久裸模| 中文字幕在线观看不卡视频| 亚洲免费在线视频| 亚洲国产精品久久不卡毛片 | 欧美一区二区三区啪啪| 精品国产伦一区二区三区观看方式 | 五月激情丁香一区二区三区| 日韩—二三区免费观看av| 久草这里只有精品视频| 国产一区二区视频在线播放| 99这里只有精品| 色哟哟欧美精品| 日韩丝袜美女视频| 亚洲国产精品二十页| 日韩美女久久久| 日韩成人免费看| 大胆欧美人体老妇| 欧美视频一区在线| 久久女同精品一区二区| 国产精品国产a| 午夜久久福利影院| 国产一区二区女| 欧美影院一区二区三区| www日韩大片| 亚洲精品国久久99热| 老司机免费视频一区二区| 波多野结衣的一区二区三区| 7777精品伊人久久久大香线蕉完整版 | 日韩福利视频导航| 波多野结衣欧美| 日韩亚洲欧美一区二区三区| 亚洲欧美在线观看| 激情图片小说一区| 91福利精品视频| 国产丝袜在线精品| 天天操天天综合网| 成人av在线看| 欧美xxxxx裸体时装秀| 亚洲欧美日韩电影| 久久电影国产免费久久电影| 91视视频在线直接观看在线看网页在线看| 欧美一区二区三区免费视频| 亚洲欧美激情插| 国产一区高清在线| 91精品国产高清一区二区三区蜜臀| 亚洲国产激情av| 看电视剧不卡顿的网站| 日本精品裸体写真集在线观看| 精品久久久久香蕉网| 午夜欧美2019年伦理| 成人深夜视频在线观看| 日韩精品一区在线观看| 午夜精品福利视频网站| 91网站视频在线观看| 国产欧美一区二区三区在线老狼| 日韩精品一二三| 欧美日韩在线不卡| 亚洲女人****多毛耸耸8| 国产成人在线视频免费播放| 亚洲精品在线一区二区| 日本美女视频一区二区| 欧美久久久久久久久| 一区二区三区**美女毛片| 91免费国产在线| 一区二区在线观看免费| 色呦呦一区二区三区| 亚洲乱码中文字幕| 日本精品一区二区三区高清| 自拍偷拍国产精品|