中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

java打印和打印預(yù)覽機(jī)制實(shí)例代碼
來源:易賢網(wǎng) 閱讀:1459 次 日期:2014-10-27 14:04:18
溫馨提示:易賢網(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í)上,我們還可以通過其他方式打印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ù)專欄

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

2026上岸·考公考編培訓(xùn)報(bào)班

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎ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)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
免费在线成人av| 亚洲国产精品999| 韩国久久久久| 亚洲欧美日韩精品一区二区| 欧美午夜在线| 欧美在线关看| 怡红院精品视频| 欧美成人精品| 日韩一级视频免费观看在线| 欧美性开放视频| 欧美一区二区精品| 在线观看国产欧美| 欧美另类一区二区三区| 亚洲视频精选| 国产一区深夜福利| 你懂的亚洲视频| 99热这里只有成人精品国产| 国产精品久久久久7777婷婷| 欧美在线影院在线视频| 亚洲电影在线看| 国产精品vvv| 久久视频精品在线| 亚洲乱码国产乱码精品精98午夜 | 亚洲性图久久| 国产伦精品一区| 美女久久网站| 欧美国产丝袜视频| 国产一区二区精品丝袜| 久久久久久亚洲精品杨幂换脸 | 免费在线日韩av| 国模 一区 二区 三区| 欧美日韩一区二区在线播放| 一本色道久久综合亚洲精品婷婷 | 久久男人资源视频| 99精品国产在热久久下载| 国产美女精品一区二区三区 | 欧美涩涩视频| 榴莲视频成人在线观看| 亚洲欧美日韩精品久久| 亚洲巨乳在线| 尤物在线精品| 国产欧美日韩一级| 欧美日本在线一区| 免费视频一区| 久久久久久综合网天天| 午夜亚洲一区| 亚洲午夜久久久久久久久电影院| 亚洲人体1000| 亚洲国产精品一区二区尤物区 | 一本色道**综合亚洲精品蜜桃冫| 国产亚洲精品一区二区| 欧美日韩一区二| 久久人人精品| 午夜精品福利一区二区三区av| 亚洲国产成人一区| 国内自拍亚洲| 国产美女精品视频免费观看| 亚洲一区在线免费| 国产一区二区在线观看免费| 久久一区二区三区国产精品 | 久久夜色精品国产噜噜av| 久久婷婷久久| 亚洲电影免费观看高清完整版在线观看 | 久久综合久久久| 欧美一区三区二区在线观看| 欧美欧美天天天天操| 国产伦精品一区二区三区在线观看| 亚洲国语精品自产拍在线观看| 欧美日韩成人精品| 中文欧美字幕免费| 禁断一区二区三区在线| 亚洲无玛一区| 亚洲国产精品ⅴa在线观看| 在线观看日韩av先锋影音电影院| 国产一区二区电影在线观看| 99综合在线| 999亚洲国产精| 亚洲午夜精品在线| 欧美一区影院| 久久久午夜精品| 亚洲欧美在线磁力| 亚洲一区二区精品在线| 国产一二三精品| 欧美电影免费观看大全| 久久综合色影院| 久热爱精品视频线路一| 亚洲欧美日本伦理| 久久亚洲私人国产精品va| 亚洲欧美春色| 久久一区激情| 国产精品一级二级三级| 欧美国产视频在线| 欧美va亚洲va国产综合| 国模叶桐国产精品一区| 欧美电影在线观看| 久久er精品视频| 欧美一区视频在线| 久久成人免费视频| 久久精品五月| 国产精品成人免费精品自在线观看| 欧美成年人视频网站| 欧美wwwwww| 美国成人毛片| 国产精品亚洲网站| 亚洲电影av在线| 国产美女精品视频| 亚洲福利视频专区| 久久精品一本| 欧美日韩一区在线观看| 亚洲午夜久久久久久尤物| 免费看的黄色欧美网站| 国产精品无码专区在线观看| 久久久www成人免费精品| 久久国产精品高清| 久久久噜久噜久久综合| 欧美日韩极品在线观看一区| 午夜久久福利| 久久精品日韩欧美| 国产精品卡一卡二卡三| 国产一区高清视频| 一区二区三区.www| 欧美亚洲网站| 欧美日韩精品一区二区三区四区 | 国产精品入口福利| 在线免费高清一区二区三区| 日韩视频不卡| 久久人91精品久久久久久不卡| 欧美激情综合在线| 亚洲高清久久网| 亚洲欧美一级二级三级| 欧美一区二区三区免费观看| 麻豆精品视频在线观看| 欧美久久一级| 亚洲国产欧美一区| 亚洲一区二区三区成人在线视频精品 | 欧美精品一区二区三区蜜桃 | 国产欧美二区| 中日韩在线视频| 欧美在线视频免费| 国产精品久久看| 精品99一区二区| 亚洲综合视频一区| 欧美日韩不卡一区| 国产一区日韩一区| 亚洲免费中文字幕| 亚洲图片在线观看| 久久综合九色综合欧美狠狠| 欧美日韩国产在线播放网站| 亚洲美女色禁图| 麻豆精品在线视频| 亚洲七七久久综合桃花剧情介绍| 久久精品卡一| 激情亚洲网站| 久久大逼视频| 亚洲大片一区二区三区| 久久国产精品72免费观看| 国产综合久久久久久| 亚洲免费网址| 欧美精品色综合| 亚洲一区亚洲二区| 欧美午夜不卡在线观看免费 | 亚洲综合第一| 欧美日韩一视频区二区| 亚洲作爱视频| 欧美三级不卡| 久久大逼视频| 国产综合自拍| 免费人成网站在线观看欧美高清| 韩国av一区二区三区在线观看| 久久精品综合| 亚洲电影一级黄| 欧美色大人视频| 亚洲午夜在线| 欧美日韩精品免费看| 亚洲欧美日韩精品一区二区| 国产欧美日韩免费| 欧美岛国在线观看| 在线午夜精品自拍| 激情伊人五月天久久综合| 国产精品视频99| 亚洲在线电影| 国产一本一道久久香蕉| 欧美日韩国产综合视频在线观看 | 国产精品黄视频| 亚洲在线黄色| 国产综合色一区二区三区| 蜜臀av性久久久久蜜臀aⅴ| 欧美日韩一区二区三区在线观看免| 亚洲第一狼人社区| 欧美日韩成人在线播放| 亚洲图片你懂的| 国产精品成人一区二区网站软件| 久久字幕精品一区| 一区二区三区.www| 亚洲电影第三页| 欧美日韩一区二区在线播放| 久久久久久久综合狠狠综合| 亚洲精品一区中文| 在线欧美小视频| 国产精品视频yy9299一区|