网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的考试资料:

 

标题 java打印和打印预览机制实例代码
内容
    代码如下:
    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;
    /**
    * 使用了原始的分页方式去渲染jtextarea,提供了打印预览机制。
    * <p>
    * 事实上,我们还可以通过其他方式打印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);// 出现在系统打印任务列表
    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();
    }
    }
    }
    }
    }
随便看

 

在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/18 6:51:13