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

📄 previewdialog.java

📁 用Java开发的、实现类似Visio功能的应用程序源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/**
 *    $Id:PreviewDialog.java $
 *
 *    Copyright 2004 ~ 2005  JingFei International Cooperation LTD. All rights reserved. *
 */


package com.jfimagine.jfdraw.gui.dialog;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Container;
import java.awt.Font;
import java.awt.Color;

import java.awt.Graphics;
import java.awt.Graphics2D;   
import java.awt.Image;

import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.BorderFactory;
import javax.swing.JTabbedPane;

import javax.swing.ImageIcon;
import javax.swing.JTextField;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRootPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JComboBox;
import javax.swing.Scrollable;
import javax.swing.JScrollPane;
import javax.swing.JFrame;
import javax.swing.SwingConstants;
import javax.swing.JSeparator;

import java.awt.print.PageFormat;


import com.jfimagine.jfdraw.gui.ToolFactory;
import com.jfimagine.jfdraw.gui.resource.CADResource;
import com.jfimagine.jfdraw.gui.GUIConst;
import com.jfimagine.jfdraw.gui.GUIUtils;
import com.jfimagine.jfdraw.gui.CADPane;
import com.jfimagine.jfdraw.gui.GlobalSettings;

import com.jfimagine.jfgraph.transfer.JFClipboard;
import com.jfimagine.jfgraph.transfer.ExportBase;
import com.jfimagine.jfgraph.transfer.ExportPrinter;
import com.jfimagine.jfgraph.transfer.OutputPage;

import com.jfimagine.jfgraph.shape.union.JFPage;
import com.jfimagine.jfgraph.shape.decorate.JFPageFormat;
import com.jfimagine.jfgraph.shape.decorate.GridFormat;
import com.jfimagine.jfgraph.shape.decorate.JFRuler;

import com.jfimagine.jfgraph.geom.Rect;

import com.jfimagine.utils.log.*; 

/**
 * PreviewDialog is used to process print preview issues on JFPage.
 *
 * @author     CookieMaker    
 *
 * @version $Revision: 1.1.0 $
 */
public class PreviewDialog extends JDialog implements ActionListener,WindowListener{


  	
    	private static PreviewDialog m_dialog=null;
    	public static PreviewDialog getDialog(){
    		return m_dialog;
	}

	    	
    	public static void showPreviewDialog(Frame owner,JFPage page, boolean isMetric, GridFormat gridFormat) {
        	m_dialog = new PreviewDialog(owner,page,CADResource.getString("label.printpreview.preview"),isMetric,gridFormat);
        	m_dialog.setVisible(true);
    	}


	private PreviewPanel previewPanel;

	public PreviewDialog(Frame owner, JFPage page,String title, boolean isMetric, GridFormat gridFormat) {
		super(owner, title, true);

		previewPanel	=new PreviewPanel(this,page,isMetric,gridFormat);

        	//Put everything together, using the content pane's BorderLayout.
        	Container contentPane = getContentPane();
		contentPane.add(previewPanel,BorderLayout.CENTER);       

		setModal(true);
		setResizable(true);
		setSize(new Dimension(700,600)); 
		setLocationRelativeTo(owner); 
		addWindowListener(this);

	
		//setUndecorated(true);
          	//getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);
	}

    	//Handle clicks on buttons.
    	public void actionPerformed(ActionEvent e) {
        	m_dialog.setVisible(false);
    	}

 
	public void windowOpened(WindowEvent e){
		previewPanel.resizeComponents();
	}

	public void windowClosing(WindowEvent e){
	}

	public void windowClosed(WindowEvent e){
	}

	public void windowIconified(WindowEvent e){
	}

	public void windowDeiconified(WindowEvent e){
	}

	public void windowActivated(WindowEvent e){ 
		//setResizable(false);
	}

	public void windowDeactivated(WindowEvent e){
	}

}


 /** Preview panel class is used to place preview canvas and scroll pane. */
class PreviewPanel extends JPanel  
		       implements ComponentListener,ItemListener,ActionListener{

   	/** A print button click command. */
    	public static final String CMD_PRINTBTN_CLICK	="cmd.printbutton.click";
   	/** A close button click command. */
    	public static final String CMD_CLOSEBTN_CLICK	="cmd.closebutton.click";
   	/** A zoom in command. */
    	public static final String CMD_ZOOMINBTN_CLICK	="cmd.zoominbutton.click";
   	/** A zoom out command. */
    	public static final String CMD_ZOOMOUTBTN_CLICK	="cmd.zoomoutbutton.click";
   	/** A zoom setup command. */
    	public static final String CMD_ZOOMSETUPBTN_CLICK="cmd.zoomsetupbutton.click";
   	/** A prior page command. */
    	public static final String CMD_PRIORPAGEBTN_CLICK="cmd.priorpagebutton.click";
   	/** A next page command. */
    	public static final String CMD_NEXTPAGEBTN_CLICK="cmd.nextpagebutton.click";

	JTextField   m_scaleText,m_currPageText;
    	private PreviewCanvas m_canvas;
        JScrollPane	drawScrollPane;
	JPanel     	bottomPanel;
	PreviewDialog   m_dialog; 
	double		m_zoomScale	=1;   

	
	//image exporter:	
	ExportBase m_exporter =new ExportBase();
	//full output image:
	private Image   m_outputImage;  
	//total page and current page:
	private int 	m_totalPage	=0;
	private int 	m_currPage	=0;

        public JScrollPane getScrollPane(){
        	return drawScrollPane;
	}
	
	private void setCurrentPageText(int currPage, int totalPage){
		m_currPageText.setText(CADResource.getString("label.printpreview.page")+": "+currPage+" "+CADResource.getString("label.printpreview.total")+": "+totalPage);
	}

        public ExportBase getExporter(){
        	return m_exporter;
	} 
	
	public int getCurrentPage(){
		return m_currPage;
	}  
	
	public Image getOutputImage(){
		return m_outputImage;
	}

        /** we make an output image here for divided showing in multi pages */
        private void makeOutputImage(){
		if (m_canvas==null)
			return;
			
		JFPage	page	=m_canvas.getPage();
		if (page==null)
			return;

                //get output image, then save it into a buffered image: m_outputImage
		GlobalSettings m_settings	=GlobalSettings.getInstance();


		m_exporter.setUsePageBounds(true);
		m_exporter.setPage(page,false,m_zoomScale,
                        m_settings.isExportWithGrid(),
                        m_settings.isExportWithRuler(),
                        m_canvas.isMetric(),
                        m_canvas.getGridFormat());
		m_outputImage	=m_exporter.getImage();  
		
		//get tiled printing pages and current page index:		
		m_totalPage	=m_exporter.getOutputPage().getTiledPageCount();
		if (m_currPage<0)
			m_currPage	=0;
		else if (m_currPage>m_totalPage-1)
			m_currPage	=m_totalPage-1; 

		setCurrentPageText(m_currPage+1,m_totalPage);
	}

	private void setCanvasSize(){ 
		if (m_canvas==null)
			return;
			
		JFPage	page	=m_canvas.getPage();
		if (page==null)
			return;
			
		m_canvas.setZoomScale(m_zoomScale);

		m_scaleText.setText(""+(int)(m_zoomScale*100)+"%");
		JFPageFormat pageFormat	=page.getPageFormat();
		Dimension d;
		if (pageFormat.getOrientation()==PageFormat.LANDSCAPE){
			d	=new Dimension((int)(pageFormat.getHeight()*m_zoomScale),(int)(pageFormat.getWidth()*m_zoomScale));
		}else{
			d	=new Dimension((int)(pageFormat.getWidth()*m_zoomScale),(int)(pageFormat.getHeight()*m_zoomScale));
		}
		d	=JFPageFormat.getScreenDimension(d);
		//we add a JFRuler size here:
                d	=new Dimension((int)(d.getWidth()+JFRuler.SIZE),(int)(d.getHeight()+JFRuler.SIZE));
		m_canvas.setPreferredSize(new Dimension(d));
		m_canvas.setSize(new Dimension(d));
		
        	
	}
        
	/**
	 *  Constructor 
	 */        
        public PreviewPanel(PreviewDialog dialog,JFPage page, boolean isMetric, GridFormat gridFormat){
		m_dialog	=dialog;


		// scale text box
		m_scaleText	=new JTextField("100%");
		m_scaleText.setFont(GUIConst.FONT_LABEL);
		//m_scaleText.setPreferredSize(new Dimension(100,25));
		Dimension scaleTextSize	=new Dimension(60,25);
		m_scaleText.setMinimumSize(scaleTextSize);
        	m_scaleText.setPreferredSize(scaleTextSize);
		m_scaleText.setMaximumSize(scaleTextSize);
		m_scaleText.setEditable(false);
		
		// scale setup button  
		ImageIcon scaleIcon	=ToolFactory.createIcon("general/zoomsetup16");
		JButton m_scaleBtn	=new JButton(scaleIcon);
		m_scaleBtn.setPreferredSize(new Dimension(25,25));
		m_scaleBtn.setActionCommand(CMD_ZOOMSETUPBTN_CLICK);
		m_scaleBtn.addActionListener(this);


		// lib process button  
		ImageIcon printIcon	=ToolFactory.createIcon("general/print16");
		JButton m_printBtn	=new JButton(printIcon);
		m_printBtn.setPreferredSize(new Dimension(25,25));
		m_printBtn.setActionCommand(CMD_PRINTBTN_CLICK);
		m_printBtn.addActionListener(this);

		ImageIcon zoominIcon	=ToolFactory.createIcon("general/zoomin16");
		JButton m_zoominBtn		=new JButton(zoominIcon);
		m_zoominBtn.setPreferredSize(new Dimension(25,25));
		m_zoominBtn.setActionCommand(CMD_ZOOMINBTN_CLICK);
		m_zoominBtn.addActionListener(this);

		ImageIcon zoomoutIcon	=ToolFactory.createIcon("general/zoomout16");
		JButton m_zoomoutBtn		=new JButton(zoomoutIcon);
		m_zoomoutBtn.setPreferredSize(new Dimension(25,25));
		m_zoomoutBtn.setActionCommand(CMD_ZOOMOUTBTN_CLICK);
		m_zoomoutBtn.addActionListener(this);


		// pageCount text box
		m_currPageText	=new JTextField("");
		setCurrentPageText(1,1);
		m_currPageText.setFont(GUIConst.FONT_LABEL);
		Dimension pageCountTextSize	=new Dimension(100,25);
		m_currPageText.setMinimumSize(pageCountTextSize);
        	m_currPageText.setPreferredSize(pageCountTextSize);
		m_currPageText.setMaximumSize(pageCountTextSize);
		m_currPageText.setEditable(false);
		
		//prior page button  
		ImageIcon priorPageIcon	=ToolFactory.createIcon("general/prior16");
		JButton m_priorPageBtn	=new JButton(priorPageIcon);
		m_priorPageBtn.setPreferredSize(new Dimension(25,25));
		m_priorPageBtn.setActionCommand(CMD_PRIORPAGEBTN_CLICK);
		m_priorPageBtn.addActionListener(this);

		//next page button  
		ImageIcon nextPageIcon	=ToolFactory.createIcon("general/next16");
		JButton m_nextPageBtn	=new JButton(nextPageIcon);
		m_nextPageBtn.setPreferredSize(new Dimension(25,25));
		m_nextPageBtn.setActionCommand(CMD_NEXTPAGEBTN_CLICK);
		m_nextPageBtn.addActionListener(this);


		JButton m_closeBtn		=new JButton(CADResource.getString("label.printpreview.close"));
		m_closeBtn.setPreferredSize(new Dimension(70,25));
		m_closeBtn.setActionCommand(CMD_CLOSEBTN_CLICK);
		m_closeBtn.addActionListener(this);
                m_closeBtn.setFont(GUIConst.FONT_BUTTON);

        	//Create a container to add combobox and button.
        	JPanel topPanel1 = new JPanel();
        	topPanel1.setPreferredSize(new Dimension(400,25));
        	topPanel1.setLayout(new BoxLayout(topPanel1, BoxLayout.X_AXIS));
        	topPanel1.add(m_printBtn);  
        	
        	JPanel separator	=new JPanel();
        	separator.setPreferredSize(new Dimension(5,25));
        	topPanel1.add(separator);
        	
        	topPanel1.add(m_zoomoutBtn);  
        	topPanel1.add(m_zoominBtn);  
        	topPanel1.add(m_scaleText);  
        	topPanel1.add(m_scaleBtn);  

        	separator	=new JPanel();
        	separator.setPreferredSize(new Dimension(5,25));
        	topPanel1.add(separator);

        	topPanel1.add(m_priorPageBtn);  
        	topPanel1.add(m_currPageText);  
        	topPanel1.add(m_nextPageBtn);  

        	separator	=new JPanel();
        	separator.setPreferredSize(new Dimension(5,25));
        	topPanel1.add(separator);
        	
		topPanel1.add(m_closeBtn);
		
		JPanel topPanel	=new JPanel();  
		topPanel.add(topPanel1,BorderLayout.CENTER);

		// draw canvas
		m_canvas=new PreviewCanvas(this,page,isMetric,gridFormat);

		// scroll pane
        	drawScrollPane = new JScrollPane(m_canvas);
        	

⌨️ 快捷键说明

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