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

📄 previewdialog.java

📁 用Java开发的、实现类似Visio功能的应用程序源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	        bottomPanel	=new JPanel();
	        bottomPanel.setLayout(new BorderLayout());
	        bottomPanel.add(drawScrollPane,BorderLayout.CENTER);
		
		// add panels to preview panel.	        
		setLayout(new BorderLayout());
	        add(topPanel,BorderLayout.NORTH);
	        add(bottomPanel,BorderLayout.CENTER); 
	        bottomPanel.addComponentListener(this);  
	        
	        setCanvasSize();

	}        

        
	/** repaint components*/
    	public void	paint(Graphics g){
    		super.paint(g);
    		if (m_outputImage==null)
    			makeOutputImage();
    		if (m_outputImage!=null)
    			m_canvas.repaint();
    	}
        
        
        /** repaint components*/
    	public void	update(Graphics g){
    		paint(g);
    	}

   	

    	public void componentHidden(ComponentEvent e) {
    	}

    	public void componentMoved(ComponentEvent e) {
    	}

    	public void componentResized(ComponentEvent e) {
    		resizeComponents();
    	}

    	public void componentShown(ComponentEvent e) {
	    	resizeComponents();
    	}

        /** resize components*/
    	public void  resizeComponents(){
    		/*
		Dimension d;
    		Rectangle r	=bottomPanel.getVisibleRect();
		int width	=(int)r.getWidth();
		int height	=(int)r.getHeight();
		
		d	=new Dimension(width-10,height-10);
	        drawScrollPane.setPreferredSize(new Dimension(d));  
	        drawScrollPane.setSize(new Dimension(d)); 
	        */
                setCanvasSize();
    	}


    	public void itemStateChanged(ItemEvent e){ 
		//comboItemChanged();
    	} 

    	//Handle clicks on buttons.
    	public void actionPerformed(ActionEvent e) { 
    		String cmd	=e.getActionCommand();
        	if (CMD_CLOSEBTN_CLICK.equals(cmd)) {
        		m_dialog.setVisible(false);
        	}else if (CMD_PRINTBTN_CLICK.equals(cmd)) {

			GlobalSettings m_settings	=GlobalSettings.getInstance();
        		
                        ExportBase export =new ExportPrinter();
                        double zoomScale =(1.0d * JFPageFormat.INCH) / JFPageFormat.INCH_SCREEN;
                        export.setPage( m_canvas.getPage(),true,zoomScale,
                        		m_settings.isExportWithGrid(),
                        		m_settings.isExportWithRuler(),
                        		m_canvas.isMetric(),
                        		m_canvas.getGridFormat());
			export.export();				                          	       
        		return;

        	}else if (CMD_ZOOMINBTN_CLICK.equals(cmd)) {
        		m_zoomScale	=ZoomDialog.nextBigZoomScale(m_zoomScale);
        		setCanvasSize();
        		makeOutputImage();
        		m_canvas.repaint();
        		return;

        	}else if (CMD_ZOOMOUTBTN_CLICK.equals(cmd)) {
        		m_zoomScale	=ZoomDialog.nextSmallZoomScale(m_zoomScale);
        		setCanvasSize(); 
        		makeOutputImage();
        		m_canvas.repaint();
        		return;

        	}else if (CMD_ZOOMSETUPBTN_CLICK.equals(cmd)) {
			JFrame	f	=GUIUtils.getJFrame(this);
        		m_zoomScale	=ZoomDialog.getNewZoomScale(f,m_zoomScale);
        		setCanvasSize();   
        		makeOutputImage();
        		m_canvas.repaint();

        	}else if (CMD_NEXTPAGEBTN_CLICK.equals(cmd)) {
        		int pageIndex	=m_currPage;
        		pageIndex++;
        		if (pageIndex>=m_totalPage)
        			pageIndex	=m_totalPage-1;
        		if (pageIndex>m_currPage){
        			m_currPage	=pageIndex;
        			setCurrentPageText(m_currPage+1,m_totalPage);
        			m_canvas.repaint();
        		}

        	}else if (CMD_PRIORPAGEBTN_CLICK.equals(cmd)) {
        		int pageIndex	=m_currPage;
        		pageIndex--;
        		if (pageIndex<0)
        			pageIndex=0;
        		if (pageIndex<m_currPage){
        			m_currPage	=pageIndex;
        			setCurrentPageText(m_currPage+1,m_totalPage);
        			m_canvas.repaint();
        		}
        	}
        	
        	

    	}
	       
}



 /** Preview canvas class is used to drawing preview graphs. */
class PreviewCanvas extends JPanel  
		       implements Scrollable,MouseListener{

   	/**an internal log utility*/
   	private static JFLogger m_logger=JFLogManager.getLogger("com.jfimagine.jfdraw.gui.dialog.PreviewDialog$PreviewCanvas");

    	/** for scrolling increment. */
    	private double m_maxUnitIncrement = 1;
    
    	/** JFPage data for this canvas.*/
    	private JFPage m_page;

   	/** if is under metric or english measurement.*/
    	private boolean m_isMetric  		=true;

    	/** grid of this canvas.*/
    	private GridFormat m_gridFormat	=new GridFormat();
        
    	/** grid of this canvas.*/
	double		m_zoomScale	=1;
        
    	/** A reference to preview panel.*/
	PreviewPanel	m_previewPanel;

    	public double getZoomScale(){
        	return m_zoomScale;
    	}
    
    	public void setZoomScale(double zoomScale){
        	this.m_zoomScale	=zoomScale; 
        	if (m_page!=null)
        		m_page.setZoomScale(zoomScale);
    	}


    	public boolean isMetric() {
        	return m_isMetric;
    	}
    
    	public void setIsMetric(boolean isMetric) {
        	this.m_isMetric = isMetric;
    	}
    	
    	/** set current grid format
     	 *  @param gridFormat A new grid format.
     	 */	
    	public void setGridFormat(GridFormat gridFormat){
    		m_gridFormat.setValue(gridFormat);
    	}

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

    	/**
     	* get drawing page.	
     	* @return current drawing page.
     	*/ 
    	public JFPage getPage(){
    		return m_page;
     	}

   
    	/** 
     	*  Constructor
     	*  @param page A drawing page data.
     	*/ 
    	public PreviewCanvas(PreviewPanel panel,JFPage page, boolean isMetric, GridFormat gridFormat) {
        	setOpaque(true);
        	setBackground(Color.white);
        	try{  
			m_previewPanel	=panel;
			
        		m_page		=(JFPage)page.clone(); 
        		JFClipboard.finishLoading(m_page,1);
        		
        		m_isMetric	=isMetric;
        		m_gridFormat.setValue(gridFormat);

        		setAutoscrolls(true); //enable synthetic drag events
        		addMouseListener(this); //handle mouse events(e.g. click, press,release)

        	}catch(Exception e){  
        		m_logger.error("PreviewCanvas: "+e);
        	}
    	}
        
    
        /** repaint components*/
    	public void	update(Graphics g){
    		paint(g);
    	}
    
   
     /** repaint all graphs*/
     public void	paint(Graphics g){

        super.paint(g);

        if (m_page==null)
        	return;  
        
        if (m_previewPanel==null)
        	return;

	Graphics2D g2	=(Graphics2D)g;  

	//clear background
   	Dimension d	=getPreferredSize();  
        g2.setBackground(Color.white);
        g2.clearRect(0, 0, d.width, d.height);  

        //get the specified tiled page rectangle:
        ExportBase exporter	=m_previewPanel.getExporter();
        if (exporter==null) return;

        int currentPage		=m_previewPanel.getCurrentPage();

	OutputPage outputPage	=exporter.getOutputPage();
	if (outputPage==null)
		return;
        Rect rect		=outputPage.getTiledPageArea(currentPage);

	Image fullImage		=m_previewPanel.getOutputImage();

	if (fullImage==null) return;
	
	
	//imageable position:
	JFPageFormat pageFormat	=m_page.getPageFormat();		
        int x	=(int)pageFormat.getPageFormat().getImageableX();
        int y	=(int)pageFormat.getPageFormat().getImageableY();
	Dimension position	=JFPageFormat.getScreenDimension(new Dimension(x,y));
	x	=(int)(position.getWidth()* m_zoomScale);
	y	=(int)(position.getHeight()* m_zoomScale);

	//draw image:		        
	int destx1	=x;
	int desty1	=y;
	int destx2	=(int)(x + rect.getWidth());
	int desty2	=(int)(y + rect.getHeight());
	int sourcex1	=(int)rect.getX();
	int sourcey1	=(int)rect.getY();
	int sourcex2	=(int)(rect.getX()+rect.getWidth());
	int sourcey2	=(int)(rect.getY()+rect.getHeight());

	g2.drawImage(fullImage,destx1,desty1,destx2,desty2,sourcex1,sourcey1,sourcex2,sourcey2,this);
    }


    /**
     * Mouse press method required by the MouseListener interface.
     * @param e A mouse press event.
     */
    public void mousePressed(MouseEvent e) {
    }

    /**
     * Mouse release method required by the MouseListener interface.
     * @param e A mouse release event.
     */
    public void mouseReleased(MouseEvent e) {
    }

    /**
     * Mouse enter method required by the MouseListener interface.
     * @param e A mouse enter event.
     */
    public void mouseEntered(MouseEvent e) {
    }

    /**
     * Mouse exit method required by the MouseListener interface.
     * @param e A mouse exit event.
     */
    public void mouseExited(MouseEvent e) {
    }

    /**
     * Mouse click method required by the MouseListener interface.
     * @param e A mouse click event.
     */
    public void mouseClicked(MouseEvent e) {
    }

	
    /** implements parent method in Interface Scrollable*/	
    public Dimension getPreferredScrollableViewportSize() {
        return getPreferredSize();
    }
    	
    /** implements parent method in Interface Scrollable*/	
    public int getScrollableUnitIncrement(Rectangle visibleRect,
                                          int orientation,
                                          int direction) {
        //Get the current position.
        int currentPosition = 0;
        if (orientation == SwingConstants.HORIZONTAL) {
            currentPosition = visibleRect.x;
        } else {
            currentPosition = visibleRect.y;
        }

        //Return the number of pixels between currentPosition
        //and the nearest tick mark in the indicated direction.
        if (direction < 0) {
            int newPosition =(int)(currentPosition -
                             (currentPosition / m_maxUnitIncrement)
                             * m_maxUnitIncrement);
            return (newPosition == 0) ? (int)m_maxUnitIncrement : newPosition;
        } else {
            return (int)(((currentPosition / m_maxUnitIncrement) + 1)
                   * m_maxUnitIncrement
                   - currentPosition);
        }
    }

    /** implements parent method in Interface Scrollable*/	
    public int getScrollableBlockIncrement(Rectangle visibleRect,
                                           int orientation,
                                           int direction) {
        if (orientation == SwingConstants.HORIZONTAL) {
            return (int)(visibleRect.width - m_maxUnitIncrement);
        } else {
            return (int)(visibleRect.height - m_maxUnitIncrement);
        }
    }

    /** implements parent method in Interface Scrollable*/	
    public boolean getScrollableTracksViewportWidth() {
        return false;
    }

    /** implements parent method in Interface Scrollable*/	
    public boolean getScrollableTracksViewportHeight() {
        return false;
    }

    /** set current max unit increment while scrolling
     *  @param pixels Pixels as unit for scrolling.
     */	
    public void setMaxUnitIncrement(int pixels) {
        m_maxUnitIncrement = pixels;
    }
}

⌨️ 快捷键说明

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