午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    Java打印和打印預(yù)覽機(jī)制實(shí)例代碼
    來(lái)源:易賢網(wǎng) 閱讀:2299 次 日期:2014-10-14 11:53:10
    溫馨提示:易賢網(wǎng)小編為您整理了“Java打印和打印預(yù)覽機(jī)制實(shí)例代碼”,方便廣大網(wǎng)友查閱!

    代碼如下:

    import java.awt.BasicStroke;

    import java.awt.BorderLayout;

    import java.awt.Color;

    import java.awt.Component;

    import java.awt.Dimension;

    import java.awt.Font;

    import java.awt.FontMetrics;

    import java.awt.Graphics;

    import java.awt.Graphics2D;

    import java.awt.GridLayout;

    import java.awt.event.ActionEvent;

    import java.awt.event.ActionListener;

    import java.awt.event.MouseAdapter;

    import java.awt.event.MouseEvent;

    import java.awt.print.PageFormat;

    import java.awt.print.Printable;

    import java.awt.print.PrinterException;

    import java.awt.print.PrinterJob;

    import javax.swing.JButton;

    import javax.swing.JDialog;

    import javax.swing.JFrame;

    import javax.swing.JPanel;

    import javax.swing.JScrollPane;

    import javax.swing.JTextArea;

    import javax.swing.SwingUtilities;

    import javax.swing.WindowConstants;

    import javax.swing.text.BadLocationException;

    import javax.swing.text.Document;

    /**

    * 使用了原始的分頁(yè)方式去渲染JTextArea,提供了打印預(yù)覽機(jī)制。

    * <p>

    * 事實(shí)上,我們還可以通過(guò)其他方式打印JTextArea:

    * <ol>

    * <li>{@code Component.print(Graphics g);} or

    * {@code Component.printAll(Graphics g);}</li>

    * <li>{@code Component.paint(Graphics g);} or

    * {@code Component.paintAll(Graphics g);} whose rending may be slightly

    * different to the previous method (for example, <code>JFrame</code>)</li>

    * <li>{@code JTable.print();} or {@code JTextComponent.print();} provide

    * especially powerful and convenient printing mechanism</li>

    * </ol>

    *

    * @author Gaowen

    */

    public class PrintUIComponent extends JPanel implements ActionListener,

    Printable {

    private static final long serialVersionUID = 4797002827940419724L;

    private static JFrame frame;

    private JTextArea textAreaToPrint;

    private PrinterJob job;

    private int[] pageBreaks;// array of page break line positions

    private String[] textLines;

    private Header header;

    public PrintUIComponent() {

    super(new BorderLayout());

    textAreaToPrint = new JTextArea(50, 20);

    for (int i = 1; i <= 50; i++) {

    textAreaToPrint.append("Line " + i + "\n");

    }

    JScrollPane scrollPane = new JScrollPane(textAreaToPrint);

    scrollPane.setPreferredSize(new Dimension(250, 200));

    add(scrollPane, BorderLayout.CENTER);

    JButton printButton = new JButton("Print This TextArea");

    printButton.setName("printButton");

    printButton.addActionListener(this);

    JButton printPreviewButton = new JButton("Print Preview");

    printPreviewButton.setName("printPreviewButton");

    printPreviewButton.addActionListener(this);

    JPanel buttonGroup = new JPanel(new GridLayout(2, 1));

    buttonGroup.add(printButton);

    buttonGroup.add(printPreviewButton);

    add(buttonGroup, BorderLayout.SOUTH);

    /* Initialize PrinterJob */

    initPrinterJob();

    }

    public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {

    @Override

    public void run() {

    createAndShowGUI();

    }

    });

    }

    private static void createAndShowGUI() {

    frame = new JFrame("Print UI Example");

    frame.setContentPane(new PrintUIComponent());

    frame.pack();

    frame.setLocationRelativeTo(null);

    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

    frame.setVisible(true);

    }

    private void initTextLines() {

    Document doc = textAreaToPrint.getDocument();

    try {

    String text = doc.getText(0, doc.getLength());

    textLines = text.split("\n");

    } catch (BadLocationException e) {

    e.printStackTrace();

    }

    }

    private void initPrinterJob() {

    job = PrinterJob.getPrinterJob();

    job.setJobName("Print TextArea");// 出現(xiàn)在系統(tǒng)打印任務(wù)列表

    job.setPrintable(this);

    }

    @Override

    public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)

    throws PrinterException {

    /*

    * It is safe to use a copy of this graphics as this will not involve

    * changes to it.

    */

    Graphics2D g2 = (Graphics2D) graphics.create();

    /* Calculate "pageBreaks" */

    Font font = new Font("Serif", Font.PLAIN, 12);

    FontMetrics metrics = g2.getFontMetrics(font);

    int lineHeight = metrics.getHeight();

    if (pageBreaks == null) {

    initTextLines();

    int linesPerPage = (int) (pageFormat.getImageableHeight() / lineHeight);

    int numBreaks = (textLines.length - 1) / linesPerPage;

    pageBreaks = new int[numBreaks];

    for (int b = 0; b < numBreaks; b++) {

    pageBreaks[b] = (b + 1) * linesPerPage;

    }

    }

    /* Condition to exit printing */

    if (pageIndex > pageBreaks.length) {

    return NO_SUCH_PAGE;

    }

    /* (0,0) is outside the imageable area, translate to avoid clipping */

    g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());

    /* Draw each line that is on this page */

    int y = 0;

    int start = (pageIndex == 0) ? 0 : pageBreaks[pageIndex - 1];

    int end = (pageIndex == pageBreaks.length) ? textLines.length

    : pageBreaks[pageIndex];

    for (int line = start; line < end; line++) {

    y += lineHeight;

    g2.drawString(textLines[line], 0, y);

    }

    /* dispose of the graphics copy */

    g2.dispose();

    /* Tell the caller that this page is part of the printed document */

    return PAGE_EXISTS;

    }

    @Override

    public void actionPerformed(ActionEvent e) {

    Object actionEventSource = e.getSource();

    if (actionEventSource instanceof JButton) {

    JButton button = (JButton) actionEventSource;

    if (button.getName().equals("printButton")) {

    pageBreaks = null;// reset pagination

    boolean ok = job.printDialog();

    if (ok) {

    try {

    job.print();

    } catch (PrinterException ex) {

    /* The job did not successfully complete */

    ex.printStackTrace();

    }

    }

    } else if (button.getName().equals("printPreviewButton")) {

    pageBreaks = null;// reset pagination

    createAndShowPreviewDialog();

    }

    }

    }

    private void createAndShowPreviewDialog() {

    JDialog previewDialog = new JDialog(frame, "Print Preview Dialog", true);

    JPanel contentPane = new JPanel(new BorderLayout());

    PreviewArea previewArea = new PreviewArea();

    previewArea.addMouseListener(new PreviewAreaMouseAdapter(previewArea));

    JScrollPane scrollPane = new JScrollPane(previewArea);

    contentPane.add(scrollPane, BorderLayout.CENTER);

    header = new Header(previewArea);

    contentPane.add(header, BorderLayout.NORTH);

    previewDialog.setContentPane(contentPane);

    previewDialog.setSize(600, 600);

    previewDialog

    .setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

    previewDialog.setVisible(true);

    }

    private class Header extends Component {

    private static final long serialVersionUID = -1741188309769027249L;

    private PreviewArea previewArea;

    private boolean paintable;

    private Header(PreviewArea previewArea) {

    this.previewArea = previewArea;

    }

    private void setPaintable(boolean paintable) {

    this.paintable = paintable;

    }

    @Override

    public void paint(Graphics g) {

    if (paintable) {

    g.setColor(Color.GRAY);

    g.drawString(

    String.valueOf(previewArea.getPageIndex() + 1)

    + "/"

    + String.valueOf(pageBreaks.length + 1)

    + " pages (Click left mouse button to preview next page; right to previous)",

    10, 15);

    }

    }

    @Override

    public Dimension getPreferredSize() {

    return new Dimension(super.getPreferredSize().width, 20);

    }

    }

    private class PreviewArea extends Component {

    private static final long serialVersionUID = -6384174997251439843L;

    private PageFormat pageFormat;

    private int pageIndex;

    private int w;

    private int h;

    private final int marginX = 10;

    private final int marginY = 20;

    private PreviewArea() {

    pageFormat = job.pageDialog(job.defaultPage());

    pageIndex = 0;

    w = (int) pageFormat.getWidth();

    h = (int) pageFormat.getHeight();

    }

    private int getPageIndex() {

    return pageIndex;

    }

    private void setPageIndex(int pageIndex) {

    this.pageIndex = pageIndex;

    }

    @Override

    public Dimension getPreferredSize() {

    return new Dimension(w + 2 * marginX, h + 2 * marginY);

    }

    @Override

    public void paint(Graphics g) {

    Graphics2D g2 = (Graphics2D) g.create();

    g2.translate(marginX, marginY);

    g2.drawRect(0, 0, w, h);

    int ix = (int) (pageFormat.getImageableX() - 1);

    int iy = (int) (pageFormat.getImageableY() - 1);

    int iw = (int) (pageFormat.getImageableWidth() + 1);

    int ih = (int) (pageFormat.getImageableHeight() + 1);

    g2.setStroke(new BasicStroke(1f, BasicStroke.CAP_ROUND,

    BasicStroke.JOIN_ROUND, 10f, new float[] { 5, 5 }, 0f));

    g2.drawRect(ix, iy, iw, ih);

    try {

    PrintUIComponent.this.print(g2, pageFormat, pageIndex);

    } catch (PrinterException e) {

    e.printStackTrace();

    }

    g2.dispose();

    header.setPaintable(true);

    header.repaint();

    }

    }

    private class PreviewAreaMouseAdapter extends MouseAdapter {

    private PreviewArea previewArea;

    private PreviewAreaMouseAdapter(PreviewArea previewArea) {

    this.previewArea = previewArea;

    }

    @Override

    public void mouseClicked(MouseEvent e) {

    int currentIndex = previewArea.getPageIndex();

    if (e.getButton() == MouseEvent.BUTTON1) {

    /* next page */

    if (currentIndex < pageBreaks.length) {

    previewArea.setPageIndex(currentIndex + 1);

    previewArea.repaint();

    }

    } else if (e.getButton() == MouseEvent.BUTTON3) {

    /* previous page */

    if (currentIndex > 0) {

    previewArea.setPageIndex(currentIndex - 1);

    previewArea.repaint();

    }

    }

    }

    }

    }

    更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄

    更多信息請(qǐng)查看數(shù)據(jù)庫(kù)
    易賢網(wǎng)手機(jī)網(wǎng)站地址:Java打印和打印預(yù)覽機(jī)制實(shí)例代碼
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢(xún)回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢(xún)?yōu)闇?zhǔn)!

    2025國(guó)考·省考課程試聽(tīng)報(bào)名

    • 報(bào)班類(lèi)型
    • 姓名
    • 手機(jī)號(hào)
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢(xún) | 簡(jiǎn)要咨詢(xún)須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
    云南網(wǎng)警備案專(zhuān)用圖標(biāo)
    聯(lián)系電話(huà):0871-65099533/13759567129 獲取招聘考試信息及咨詢(xún)關(guān)注公眾號(hào):hfpxwx
    咨詢(xún)QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報(bào)警專(zhuān)用圖標(biāo)