📄 previewdialog.java
字号:
/**
* $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 + -