Java打印和打印预览机制(转存)

  1. import java.awt.BasicStroke;  
  2. import java.awt.BorderLayout;  
  3. import java.awt.Color;  
  4. import java.awt.Component;  
  5. import java.awt.Dimension;  
  6. import java.awt.Font;  
  7. import java.awt.FontMetrics;  
  8. import java.awt.Graphics;  
  9. import java.awt.Graphics2D;  
  10. import java.awt.GridLayout;  
  11. import java.awt.event.ActionEvent;  
  12. import java.awt.event.ActionListener;  
  13. import java.awt.event.MouseAdapter;  
  14. import java.awt.event.MouseEvent;  
  15. import java.awt.print.PageFormat;  
  16. import java.awt.print.Printable;  
  17. import java.awt.print.PrinterException;  
  18. import java.awt.print.PrinterJob;  
  19.   
  20. import javax.swing.JButton;  
  21. import javax.swing.JDialog;  
  22. import javax.swing.JFrame;  
  23. import javax.swing.JPanel;  
  24. import javax.swing.JScrollPane;  
  25. import javax.swing.JTextArea;  
  26. import javax.swing.SwingUtilities;  
  27. import javax.swing.WindowConstants;  
  28. import javax.swing.text.BadLocationException;  
  29. import javax.swing.text.Document;  
  30.   
  31. /** 
  32.  * 使用了原始的分页方式去渲染JTextArea,提供了打印预览机制。 
  33.  * <p> 
  34.  * 事实上,我们还可以通过其他方式打印JTextArea: 
  35.  * <ol> 
  36.  * <li>{@code Component.print(Graphics g);} or 
  37.  * {@code Component.printAll(Graphics g);}</li> 
  38.  * <li>{@code Component.paint(Graphics g);} or 
  39.  * {@code Component.paintAll(Graphics g);} whose rending may be slightly 
  40.  * different to the previous method (for example, <code>JFrame</code>)</li> 
  41.  * <li>{@code JTable.print();} or {@code JTextComponent.print();} provide 
  42.  * especially powerful and convenient printing mechanism</li> 
  43.  * </ol> 
  44.  *  
  45.  * @author Gaowen 
  46.  */  
  47. public class PrintUIComponent extends JPanel implements ActionListener,  
  48.         Printable {  
  49.     private static final long serialVersionUID = 4797002827940419724L;  
  50.     private static JFrame frame;  
  51.     private JTextArea textAreaToPrint;  
  52.     private PrinterJob job;  
  53.     private int[] pageBreaks;// array of page break line positions  
  54.     private String[] textLines;  
  55.     private Header header;  
  56.   
  57.     public PrintUIComponent() {  
  58.         super(new BorderLayout());  
  59.         textAreaToPrint = new JTextArea(5020);  
  60.         for (int i = 1; i <= 50; i++) {  
  61.             textAreaToPrint.append("Line " + i + "\n");  
  62.         }  
  63.         JScrollPane scrollPane = new JScrollPane(textAreaToPrint);  
  64.         scrollPane.setPreferredSize(new Dimension(250200));  
  65.         add(scrollPane, BorderLayout.CENTER);  
  66.         JButton printButton = new JButton("Print This TextArea");  
  67.         printButton.setName("printButton");  
  68.         printButton.addActionListener(this);  
  69.         JButton printPreviewButton = new JButton("Print Preview");  
  70.         printPreviewButton.setName("printPreviewButton");  
  71.         printPreviewButton.addActionListener(this);  
  72.         JPanel buttonGroup = new JPanel(new GridLayout(21));  
  73.         buttonGroup.add(printButton);  
  74.         buttonGroup.add(printPreviewButton);  
  75.         add(buttonGroup, BorderLayout.SOUTH);  
  76.   
  77.         /* Initialize PrinterJob */  
  78.         initPrinterJob();  
  79.     }  
  80.   
  81.     public static void main(String[] args) {  
  82.         SwingUtilities.invokeLater(new Runnable() {  
  83.             @Override  
  84.             public void run() {  
  85.                 createAndShowGUI();  
  86.             }  
  87.         });  
  88.     }  
  89.   
  90.     private static void createAndShowGUI() {  
  91.         frame = new JFrame("Print UI Example");  
  92.         frame.setContentPane(new PrintUIComponent());  
  93.         frame.pack();  
  94.         frame.setLocationRelativeTo(null);  
  95.         frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);  
  96.         frame.setVisible(true);  
  97.     }  
  98.   
  99.     private void initTextLines() {  
  100.         Document doc = textAreaToPrint.getDocument();  
  101.         try {  
  102.             String text = doc.getText(0, doc.getLength());  
  103.             textLines = text.split("\n");  
  104.         } catch (BadLocationException e) {  
  105.             e.printStackTrace();  
  106.         }  
  107.     }  
  108.   
  109.     private void initPrinterJob() {  
  110.         job = PrinterJob.getPrinterJob();  
  111.         job.setJobName("Print TextArea");// 出现在系统打印任务列表  
  112.         job.setPrintable(this);  
  113.     }  
  114.   
  115.     @Override  
  116.     public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)  
  117.             throws PrinterException {  
  118.         /* 
  119.          * It is safe to use a copy of this graphics as this will not involve 
  120.          * changes to it. 
  121.          */  
  122.         Graphics2D g2 = (Graphics2D) graphics.create();  
  123.   
  124.         /* Calculate "pageBreaks" */  
  125.         Font font = new Font("Serif", Font.PLAIN, 12);  
  126.         FontMetrics metrics = g2.getFontMetrics(font);  
  127.         int lineHeight = metrics.getHeight();  
  128.         if (pageBreaks == null) {  
  129.             initTextLines();  
  130.             int linesPerPage = (int) (pageFormat.getImageableHeight() / lineHeight);  
  131.             int numBreaks = (textLines.length - 1) / linesPerPage;  
  132.             pageBreaks = new int[numBreaks];  
  133.             for (int b = 0; b < numBreaks; b++) {  
  134.                 pageBreaks[b] = (b + 1) * linesPerPage;  
  135.             }  
  136.         }  
  137.   
  138.         /* Condition to exit printing */  
  139.         if (pageIndex > pageBreaks.length) {  
  140.             return NO_SUCH_PAGE;  
  141.         }  
  142.   
  143.         /* (0,0) is outside the imageable area, translate to avoid clipping */  
  144.         g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());  
  145.   
  146.         /* Draw each line that is on this page */  
  147.         int y = 0;  
  148.         int start = (pageIndex == 0) ? 0 : pageBreaks[pageIndex - 1];  
  149.         int end = (pageIndex == pageBreaks.length) ? textLines.length  
  150.                 : pageBreaks[pageIndex];  
  151.         for (int line = start; line < end; line++) {  
  152.             y += lineHeight;  
  153.             g2.drawString(textLines[line], 0, y);  
  154.         }  
  155.   
  156.         /* dispose of the graphics copy */  
  157.         g2.dispose();  
  158.   
  159.         /* Tell the caller that this page is part of the printed document */  
  160.         return PAGE_EXISTS;  
  161.     }  
  162.   
  163.     @Override  
  164.     public void actionPerformed(ActionEvent e) {  
  165.         Object actionEventSource = e.getSource();  
  166.         if (actionEventSource instanceof JButton) {  
  167.             JButton button = (JButton) actionEventSource;  
  168.             if (button.getName().equals("printButton")) {  
  169.                 pageBreaks = null;// reset pagination  
  170.                 boolean ok = job.printDialog();  
  171.                 if (ok) {  
  172.                     try {  
  173.                         job.print();  
  174.                     } catch (PrinterException ex) {  
  175.                         /* The job did not successfully complete */  
  176.                         ex.printStackTrace();  
  177.                     }  
  178.                 }  
  179.             } else if (button.getName().equals("printPreviewButton")) {  
  180.                 pageBreaks = null;// reset pagination  
  181.                 createAndShowPreviewDialog();  
  182.             }  
  183.         }  
  184.     }  
  185.   
  186.     private void createAndShowPreviewDialog() {  
  187.         JDialog previewDialog = new JDialog(frame, "Print Preview Dialog"true);  
  188.         JPanel contentPane = new JPanel(new BorderLayout());  
  189.         PreviewArea previewArea = new PreviewArea();  
  190.         previewArea.addMouseListener(new PreviewAreaMouseAdapter(previewArea));  
  191.         JScrollPane scrollPane = new JScrollPane(previewArea);  
  192.         contentPane.add(scrollPane, BorderLayout.CENTER);  
  193.         header = new Header(previewArea);  
  194.         contentPane.add(header, BorderLayout.NORTH);  
  195.         previewDialog.setContentPane(contentPane);  
  196.         previewDialog.setSize(600600);  
  197.         previewDialog  
  198.                 .setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);  
  199.         previewDialog.setVisible(true);  
  200.     }  
  201.   
  202.     private class Header extends Component {  
  203.         private static final long serialVersionUID = -1741188309769027249L;  
  204.         private PreviewArea previewArea;  
  205.         private boolean paintable;  
  206.   
  207.         private Header(PreviewArea previewArea) {  
  208.             this.previewArea = previewArea;  
  209.         }  
  210.   
  211.         private void setPaintable(boolean paintable) {  
  212.             this.paintable = paintable;  
  213.         }  
  214.   
  215.         @Override  
  216.         public void paint(Graphics g) {  
  217.             if (paintable) {  
  218.                 g.setColor(Color.GRAY);  
  219.                 g.drawString(  
  220.                         String.valueOf(previewArea.getPageIndex() + 1)  
  221.                                 + "/"  
  222.                                 + String.valueOf(pageBreaks.length + 1)  
  223.                                 + " pages (Click left mouse button to preview next page; right to previous)",  
  224.                         1015);  
  225.             }  
  226.         }  
  227.   
  228.         @Override  
  229.         public Dimension getPreferredSize() {  
  230.             return new Dimension(super.getPreferredSize().width, 20);  
  231.         }  
  232.     }  
  233.   
  234.     private class PreviewArea extends Component {  
  235.         private static final long serialVersionUID = -6384174997251439843L;  
  236.         private PageFormat pageFormat;  
  237.         private int pageIndex;  
  238.         private int w;  
  239.         private int h;  
  240.         private final int marginX = 10;  
  241.         private final int marginY = 20;  
  242.   
  243.         private PreviewArea() {  
  244.             pageFormat = job.pageDialog(job.defaultPage());  
  245.             pageIndex = 0;  
  246.             w = (int) pageFormat.getWidth();  
  247.             h = (int) pageFormat.getHeight();  
  248.         }  
  249.   
  250.         private int getPageIndex() {  
  251.             return pageIndex;  
  252.         }  
  253.   
  254.         private void setPageIndex(int pageIndex) {  
  255.             this.pageIndex = pageIndex;  
  256.         }  
  257.   
  258.         @Override  
  259.         public Dimension getPreferredSize() {  
  260.             return new Dimension(w + 2 * marginX, h + 2 * marginY);  
  261.         }  
  262.   
  263.         @Override  
  264.         public void paint(Graphics g) {  
  265.             Graphics2D g2 = (Graphics2D) g.create();  
  266.             g2.translate(marginX, marginY);  
  267.             g2.drawRect(00, w, h);  
  268.             int ix = (int) (pageFormat.getImageableX() - 1);  
  269.             int iy = (int) (pageFormat.getImageableY() - 1);  
  270.             int iw = (int) (pageFormat.getImageableWidth() + 1);  
  271.             int ih = (int) (pageFormat.getImageableHeight() + 1);  
  272.             g2.setStroke(new BasicStroke(1f, BasicStroke.CAP_ROUND,  
  273.                     BasicStroke.JOIN_ROUND, 10f, new float[] { 55 }, 0f));  
  274.             g2.drawRect(ix, iy, iw, ih);  
  275.             try {  
  276.                 PrintUIComponent.this.print(g2, pageFormat, pageIndex);  
  277.             } catch (PrinterException e) {  
  278.                 e.printStackTrace();  
  279.             }  
  280.             g2.dispose();  
  281.             header.setPaintable(true);  
  282.             header.repaint();  
  283.         }  
  284.     }  
  285.   
  286.     private class PreviewAreaMouseAdapter extends MouseAdapter {  
  287.         private PreviewArea previewArea;  
  288.   
  289.         private PreviewAreaMouseAdapter(PreviewArea previewArea) {  
  290.             this.previewArea = previewArea;  
  291.         }  
  292.   
  293.         @Override  
  294.         public void mouseClicked(MouseEvent e) {  
  295.             int currentIndex = previewArea.getPageIndex();  
  296.             if (e.getButton() == MouseEvent.BUTTON1) {  
  297.                 /* next page */  
  298.                 if (currentIndex < pageBreaks.length) {  
  299.                     previewArea.setPageIndex(currentIndex + 1);  
  300.                     previewArea.repaint();  
  301.                 }  
  302.             } else if (e.getButton() == MouseEvent.BUTTON3) {  
  303.                 /* previous page */  
  304.                 if (currentIndex > 0) {  
  305.                     previewArea.setPageIndex(currentIndex - 1);  
  306.                     previewArea.repaint();  
  307.                 }  
  308.             }  
  309.         }  
  310.     }  
  311. }  
[java]  view plain  copy
  1. import java.awt.BasicStroke;  
  2. import java.awt.BorderLayout;  
  3. import java.awt.Color;  
  4. import java.awt.Component;  
  5. import java.awt.Dimension;  
  6. import java.awt.Font;  
  7. import java.awt.FontMetrics;  
  8. import java.awt.Graphics;  
  9. import java.awt.Graphics2D;  
  10. import java.awt.GridLayout;  
  11. import java.awt.event.ActionEvent;  
  12. import java.awt.event.ActionListener;  
  13. import java.awt.event.MouseAdapter;  
  14. import java.awt.event.MouseEvent;  
  15. import java.awt.print.PageFormat;  
  16. import java.awt.print.Printable;  
  17. import java.awt.print.PrinterException;  
  18. import java.awt.print.PrinterJob;  
  19.   
  20. import javax.swing.JButton;  
  21. import javax.swing.JDialog;  
  22. import javax.swing.JFrame;  
  23. import javax.swing.JPanel;  
  24. import javax.swing.JScrollPane;  
  25. import javax.swing.JTextArea;  
  26. import javax.swing.SwingUtilities;  
  27. import javax.swing.WindowConstants;  
  28. import javax.swing.text.BadLocationException;  
  29. import javax.swing.text.Document;  
  30.   
  31. /** 
  32.  * 使用了原始的分页方式去渲染JTextArea,提供了打印预览机制。 
  33.  * <p> 
  34.  * 事实上,我们还可以通过其他方式打印JTextArea: 
  35.  * <ol> 
  36.  * <li>{@code Component.print(Graphics g);} or 
  37.  * {@code Component.printAll(Graphics g);}</li> 
  38.  * <li>{@code Component.paint(Graphics g);} or 
  39.  * {@code Component.paintAll(Graphics g);} whose rending may be slightly 
  40.  * different to the previous method (for example, <code>JFrame</code>)</li> 
  41.  * <li>{@code JTable.print();} or {@code JTextComponent.print();} provide 
  42.  * especially powerful and convenient printing mechanism</li> 
  43.  * </ol> 
  44.  *  
  45.  * @author Gaowen 
  46.  */  
  47. public class PrintUIComponent extends JPanel implements ActionListener,  
  48.         Printable {  
  49.     private static final long serialVersionUID = 4797002827940419724L;  
  50.     private static JFrame frame;  
  51.     private JTextArea textAreaToPrint;  
  52.     private PrinterJob job;  
  53.     private int[] pageBreaks;// array of page break line positions  
  54.     private String[] textLines;  
  55.     private Header header;  
  56.   
  57.     public PrintUIComponent() {  
  58.         super(new BorderLayout());  
  59.         textAreaToPrint = new JTextArea(5020);  
  60.         for (int i = 1; i <= 50; i++) {  
  61.             textAreaToPrint.append("Line " + i + "\n");  
  62.         }  
  63.         JScrollPane scrollPane = new JScrollPane(textAreaToPrint);  
  64.         scrollPane.setPreferredSize(new Dimension(250200));  
  65.         add(scrollPane, BorderLayout.CENTER);  
  66.         JButton printButton = new JButton("Print This TextArea");  
  67.         printButton.setName("printButton");  
  68.         printButton.addActionListener(this);  
  69.         JButton printPreviewButton = new JButton("Print Preview");  
  70.         printPreviewButton.setName("printPreviewButton");  
  71.         printPreviewButton.addActionListener(this);  
  72.         JPanel buttonGroup = new JPanel(new GridLayout(21));  
  73.         buttonGroup.add(printButton);  
  74.         buttonGroup.add(printPreviewButton);  
  75.         add(buttonGroup, BorderLayout.SOUTH);  
  76.   
  77.         /* Initialize PrinterJob */  
  78.         initPrinterJob();  
  79.     }  
  80.   
  81.     public static void main(String[] args) {  
  82.         SwingUtilities.invokeLater(new Runnable() {  
  83.             @Override  
  84.             public void run() {  
  85.                 createAndShowGUI();  
  86.             }  
  87.         });  
  88.     }  
  89.   
  90.     private static void createAndShowGUI() {  
  91.         frame = new JFrame("Print UI Example");  
  92.         frame.setContentPane(new PrintUIComponent());  
  93.         frame.pack();  
  94.         frame.setLocationRelativeTo(null);  
  95.         frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);  
  96.         frame.setVisible(true);  
  97.     }  
  98.   
  99.     private void initTextLines() {  
  100.         Document doc = textAreaToPrint.getDocument();  
  101.         try {  
  102.             String text = doc.getText(0, doc.getLength());  
  103.             textLines = text.split("\n");  
  104.         } catch (BadLocationException e) {  
  105.             e.printStackTrace();  
  106.         }  
  107.     }  
  108.   
  109.     private void initPrinterJob() {  
  110.         job = PrinterJob.getPrinterJob();  
  111.         job.setJobName("Print TextArea");// 出现在系统打印任务列表  
  112.         job.setPrintable(this);  
  113.     }  
  114.   
  115.     @Override  
  116.     public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)  
  117.             throws PrinterException {  
  118.         /* 
  119.          * It is safe to use a copy of this graphics as this will not involve 
  120.          * changes to it. 
  121.          */  
  122.         Graphics2D g2 = (Graphics2D) graphics.create();  
  123.   
  124.         /* Calculate "pageBreaks" */  
  125.         Font font = new Font("Serif", Font.PLAIN, 12);  
  126.         FontMetrics metrics = g2.getFontMetrics(font);  
  127.         int lineHeight = metrics.getHeight();  
  128.         if (pageBreaks == null) {  
  129.             initTextLines();  
  130.             int linesPerPage = (int) (pageFormat.getImageableHeight() / lineHeight);  
  131.             int numBreaks = (textLines.length - 1) / linesPerPage;  
  132.             pageBreaks = new int[numBreaks];  
  133.             for (int b = 0; b < numBreaks; b++) {  
  134.                 pageBreaks[b] = (b + 1) * linesPerPage;  
  135.             }  
  136.         }  
  137.   
  138.         /* Condition to exit printing */  
  139.         if (pageIndex > pageBreaks.length) {  
  140.             return NO_SUCH_PAGE;  
  141.         }  
  142.   
  143.         /* (0,0) is outside the imageable area, translate to avoid clipping */  
  144.         g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());  
  145.   
  146.         /* Draw each line that is on this page */  
  147.         int y = 0;  
  148.         int start = (pageIndex == 0) ? 0 : pageBreaks[pageIndex - 1];  
  149.         int end = (pageIndex == pageBreaks.length) ? textLines.length  
  150.                 : pageBreaks[pageIndex];  
  151.         for (int line = start; line < end; line++) {  
  152.             y += lineHeight;  
  153.             g2.drawString(textLines[line], 0, y);  
  154.         }  
  155.   
  156.         /* dispose of the graphics copy */  
  157.         g2.dispose();  
  158.   
  159.         /* Tell the caller that this page is part of the printed document */  
  160.         return PAGE_EXISTS;  
  161.     }  
  162.   
  163.     @Override  
  164.     public void actionPerformed(ActionEvent e) {  
  165.         Object actionEventSource = e.getSource();  
  166.         if (actionEventSource instanceof JButton) {  
  167.             JButton button = (JButton) actionEventSource;  
  168.             if (button.getName().equals("printButton")) {  
  169.                 pageBreaks = null;// reset pagination  
  170.                 boolean ok = job.printDialog();  
  171.                 if (ok) {  
  172.                     try {  
  173.                         job.print();  
  174.                     } catch (PrinterException ex) {  
  175.                         /* The job did not successfully complete */  
  176.                         ex.printStackTrace();  
  177.                     }  
  178.                 }  
  179.             } else if (button.getName().equals("printPreviewButton")) {  
  180.                 pageBreaks = null;// reset pagination  
  181.                 createAndShowPreviewDialog();  
  182.             }  
  183.         }  
  184.     }  
  185.   
  186.     private void createAndShowPreviewDialog() {  
  187.         JDialog previewDialog = new JDialog(frame, "Print Preview Dialog"true);  
  188.         JPanel contentPane = new JPanel(new BorderLayout());  
  189.         PreviewArea previewArea = new PreviewArea();  
  190.         previewArea.addMouseListener(new PreviewAreaMouseAdapter(previewArea));  
  191.         JScrollPane scrollPane = new JScrollPane(previewArea);  
  192.         contentPane.add(scrollPane, BorderLayout.CENTER);  
  193.         header = new Header(previewArea);  
  194.         contentPane.add(header, BorderLayout.NORTH);  
  195.         previewDialog.setContentPane(contentPane);  
  196.         previewDialog.setSize(600600);  
  197.         previewDialog  
  198.                 .setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);  
  199.         previewDialog.setVisible(true);  
  200.     }  
  201.   
  202.     private class Header extends Component {  
  203.         private static final long serialVersionUID = -1741188309769027249L;  
  204.         private PreviewArea previewArea;  
  205.         private boolean paintable;  
  206.   
  207.         private Header(PreviewArea previewArea) {  
  208.             this.previewArea = previewArea;  
  209.         }  
  210.   
  211.         private void setPaintable(boolean paintable) {  
  212.             this.paintable = paintable;  
  213.         }  
  214.   
  215.         @Override  
  216.         public void paint(Graphics g) {  
  217.             if (paintable) {  
  218.                 g.setColor(Color.GRAY);  
  219.                 g.drawString(  
  220.                         String.valueOf(previewArea.getPageIndex() + 1)  
  221.                                 + "/"  
  222.                                 + String.valueOf(pageBreaks.length + 1)  
  223.                                 + " pages (Click left mouse button to preview next page; right to previous)",  
  224.                         1015);  
  225.             }  
  226.         }  
  227.   
  228.         @Override  
  229.         public Dimension getPreferredSize() {  
  230.             return new Dimension(super.getPreferredSize().width, 20);  
  231.         }  
  232.     }  
  233.   
  234.     private class PreviewArea extends Component {  
  235.         private static final long serialVersionUID = -6384174997251439843L;  
  236.         private PageFormat pageFormat;  
  237.         private int pageIndex;  
  238.         private int w;  
  239.         private int h;  
  240.         private final int marginX = 10;  
  241.         private final int marginY = 20;  
  242.   
  243.         private PreviewArea() {  
  244.             pageFormat = job.pageDialog(job.defaultPage());  
  245.             pageIndex = 0;  
  246.             w = (int) pageFormat.getWidth();  
  247.             h = (int) pageFormat.getHeight();  
  248.         }  
  249.   
  250.         private int getPageIndex() {  
  251.             return pageIndex;  
  252.         }  
  253.   
  254.         private void setPageIndex(int pageIndex) {  
  255.             this.pageIndex = pageIndex;  
  256.         }  
  257.   
  258.         @Override  
  259.         public Dimension getPreferredSize() {  
  260.             return new Dimension(w + 2 * marginX, h + 2 * marginY);  
  261.         }  
  262.   
  263.         @Override  
  264.         public void paint(Graphics g) {  
  265.             Graphics2D g2 = (Graphics2D) g.create();  
  266.             g2.translate(marginX, marginY);  
  267.             g2.drawRect(00, w, h);  
  268.             int ix = (int) (pageFormat.getImageableX() - 1);  
  269.             int iy = (int) (pageFormat.getImageableY() - 1);  
  270.             int iw = (int) (pageFormat.getImageableWidth() + 1);  
  271.             int ih = (int) (pageFormat.getImageableHeight() + 1);  
  272.             g2.setStroke(new BasicStroke(1f, BasicStroke.CAP_ROUND,  
  273.                     BasicStroke.JOIN_ROUND, 10f, new float[] { 55 }, 0f));  
  274.             g2.drawRect(ix, iy, iw, ih);  
  275.             try {  
  276.                 PrintUIComponent.this.print(g2, pageFormat, pageIndex);  
  277.             } catch (PrinterException e) {  
  278.                 e.printStackTrace();  
  279.             }  
  280.             g2.dispose();  
  281.             header.setPaintable(true);  
  282.             header.repaint();  
  283.         }  
  284.     }  
  285.   
  286.     private class PreviewAreaMouseAdapter extends MouseAdapter {  
  287.         private PreviewArea previewArea;  
  288.   
  289.         private PreviewAreaMouseAdapter(PreviewArea previewArea) {  
  290.             this.previewArea = previewArea;  
  291.         }  
  292.   
  293.         @Override  
  294.         public void mouseClicked(MouseEvent e) {  
  295.             int currentIndex = previewArea.getPageIndex();  
  296.             if (e.getButton() == MouseEvent.BUTTON1) {  
  297.                 /* next page */  
  298.                 if (currentIndex < pageBreaks.length) {  
  299.                     previewArea.setPageIndex(currentIndex + 1);  
  300.                     previewArea.repaint();  
  301.                 }  
  302.             } else if (e.getButton() == MouseEvent.BUTTON3) {  
  303.                 /* previous page */  
  304.                 if (currentIndex > 0) {  
  305.                     previewArea.setPageIndex(currentIndex - 1);  
  306.                     previewArea.repaint();  
  307.                 }  
  308.             }  
  309.         }  
  310.     }  
  311. }  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值