亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍

Java打印和打印預覽機制實例代碼
來源:易賢網 閱讀:2647 次 日期:2014-10-14 11:53:10
溫馨提示:易賢網小編為您整理了“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();

}

}

}

}

}

更多信息請查看IT技術專欄

更多信息請查看數據庫
易賢網手機網站地址:Java打印和打印預覽機制實例代碼
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權所有:易賢網

亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍
国产综合色产| 亚洲中字在线| 亚洲在线国产日韩欧美| 久久久久国产精品午夜一区| 欧美一区影院| 红桃视频欧美| 亚洲综合视频一区| 国产精品国产三级欧美二区| 亚洲国产精品一区| 先锋亚洲精品| 在线观看一区欧美| 久久精品成人| 夜夜精品视频| 亚洲香蕉网站| 久久国产88| 国模大胆一区二区三区| 99日韩精品| 欧美日韩综合| 久久综合导航| 国产精品主播| 亚洲美女一区| 精品不卡一区二区三区| 欧美一区激情| 久久不射2019中文字幕| 日韩一区二区久久| 伊人成人在线视频| 黑丝一区二区三区| 欧美在线观看天堂一区二区三区| 国产欧美91| 亚洲日本久久| 在线日韩av| 欧美精品激情| 狂野欧美一区| 你懂的视频一区二区| 香蕉国产精品偷在线观看不卡| 91久久国产自产拍夜夜嗨| 国产精品www994| 欧美a级在线| 久久综合狠狠| 午夜精品亚洲一区二区三区嫩草| 欧美在线综合| 男人的天堂亚洲在线| 亚洲一区二区动漫| 国产欧美91| 国产精品久久国产三级国电话系列| 黄色亚洲在线| 亚洲精品影视| 一区二区三区导航| 国产欧美精品久久| 亚久久调教视频| 性欧美长视频| 欧美一区激情| 亚洲午夜精品一区二区| 亚洲高清久久| 国产精品综合| 欧美精品aa| 在线欧美亚洲| 国产精品视频福利| 久久国产日韩欧美| 欧美国产91| 一区久久精品| 亚洲影音一区| 欧美日韩国产不卡在线看| 欧美日本韩国一区二区三区| 韩日在线一区| 国产日韩一区二区三区在线播放| 亚洲伊人网站| 欧美激情自拍| 日韩一级精品| 久久国产精品久久w女人spa| 久久婷婷亚洲| 亚洲国产99| 久久精品国产第一区二区三区最新章节| 久久久久久亚洲精品不卡4k岛国| 欧美体内she精视频在线观看| 国产一区二区中文| 国产精品社区| 一区免费视频| 久久久久久九九九九| 国产一在线精品一区在线观看| 亚洲精品一区二区三区樱花| 久热这里只精品99re8久| 亚洲高清久久| 欧美日韩国产免费观看| 国产日韩在线一区二区三区| 欧美日韩综合| 欧美综合二区| 一区二区三区福利| 亚洲天堂偷拍| 欧美在线看片| 亚洲综合三区| 一本久道久久久| 亚洲视频高清| 欧美成人综合一区| 亚洲女同同性videoxma| 伊人久久成人| 欧美激情视频一区二区三区免费| 一本色道婷婷久久欧美| 欧美网站在线| 欧美一区2区三区4区公司二百| 一区二区动漫| 一本色道久久综合一区| 国产在线视频欧美一区二区三区| 久久久精彩视频| 国产欧美一区二区三区另类精品 | 女人香蕉久久**毛片精品| 亚洲大片av| 狠狠久久综合婷婷不卡| 欧美精品二区三区四区免费看视频| 国产亚洲亚洲| 国产一级久久| 亚洲免费黄色| 在线视频精品一区| 国产三区二区一区久久| 99综合精品| 亚洲少妇在线| 亚洲免费影院| 久久久www| 久久综合久久久| 午夜精品网站| 国内精品99| 亚洲人成高清| 国产精品永久| 久久亚洲午夜电影| 欧美在线亚洲| 欧美午夜一区| 亚洲高清电影| 国产农村妇女毛片精品久久莱园子| 国产欧美在线| 可以看av的网站久久看| 欧美日韩高清在线一区| 一区视频在线| 西西裸体人体做爰大胆久久久| 亚洲一区二区三区精品视频| 亚洲在线电影| 欧美日韩日本网| 亚洲国产精品日韩| 亚洲一区欧美二区| 欧美三区在线| 亚洲影院一区| 国产精品大片免费观看| 99在线精品免费视频九九视 | 狠狠色伊人亚洲综合网站色| 亚洲图片在线观看| 亚洲一区图片| 激情综合亚洲| 久久午夜精品| 亚洲深夜激情| 午夜久久影院| 国产精品日韩精品欧美精品| 欧美日韩福利| 国产精品亚洲一区| 亚洲视频狠狠| 久久精品国产第一区二区三区最新章节 | 亚洲精品麻豆| 欧美中文字幕| 亚洲精品国产日韩| 欧美日韩高清在线一区| 国产嫩草一区二区三区在线观看| 欧美1级日本1级| 99pao成人国产永久免费视频| 久久亚洲一区| 国产精品一卡| 亚洲国产欧美国产综合一区| 久久婷婷av| 亚洲一区二区免费看| 激情综合亚洲| 国产精品久久7| 美女亚洲精品| 午夜影院日韩| 国产精品一区视频| 一本色道久久综合亚洲精品不| 欧美精品国产一区二区| 久久精品99| 亚洲一级在线| 亚洲一区二区三区四区五区午夜| 亚洲午夜久久久久久尤物| 欧美精选一区| 欧美日本三区| 欧美国内亚洲| 欧美一区亚洲| 欧美福利一区| 欧美日本一区二区高清播放视频| 久久裸体视频| 久久久精品五月天| 久久久水蜜桃| 欧美激情性爽国产精品17p| 久久综合九色综合网站| 欧美+亚洲+精品+三区| 欧美a级片一区| 欧美精品aa| 黄色精品一区| 日韩午夜av| 国产精品一区在线观看| 免费在线亚洲欧美| 久久久青草婷婷精品综合日韩| 美女国产精品| 欧美精品不卡| 在线观看视频日韩| 99综合视频| 美脚丝袜一区二区三区在线观看| 久久久久国产一区二区| 欧美区一区二| 亚洲美洲欧洲综合国产一区| 国产精品久久九九| 欧美福利一区| 99精品福利视频| 久久国产欧美| 在线成人国产| 香蕉国产精品偷在线观看不卡| 乱码第一页成人| 国内激情久久| 国产精品一区二区三区观看| 久久久久久久久久码影片| 欧美日韩综合另类| 国产精品久久久一区二区| 久久精品国产99精品国产亚洲性色| 欧美另类综合| 国产欧美日韩一区二区三区| 性欧美精品高清| 欧美日韩国产色综合一二三四| 韩国av一区| 国产乱人伦精品一区二区| 午夜精品久久| 国产精品毛片| 欧美日韩一区二区三| 国产日韩欧美三区| 国外成人免费视频| 裸体一区二区| 99www免费人成精品| 欧美不卡三区| 亚洲一区二区三区免费观看| 亚洲视频一二| 亚洲欧美影院| 欧美一级专区| 国产三级精品在线不卡| 国内久久精品| 久久亚洲不卡| 久久99伊人| 亚洲视频www| 亚洲性视频h| 欧美激情五月| 久久久久国内| 六月婷婷久久| 久久国产精品高清| 国产精品久久久一区二区| 黄色另类av| 国产精品v日韩精品v欧美精品网站| 亚洲免费一区二区| 国产精品一国产精品k频道56| 在线看片日韩| 亚洲高清视频一区| 激情自拍一区| 激情欧美一区| 影音先锋久久资源网| 韩日成人在线| 国产一区亚洲| 欧美午夜国产| 韩国一区二区三区美女美女秀| 欧美区国产区| 国产精品国产三级欧美二区| 久久亚洲精品伦理| 欧美一区1区三区3区公司 | 亚洲影院在线| 亚洲天堂久久| 国产在线欧美日韩| 欧美a级片一区| 欧美一区1区三区3区公司| 一区二区三区国产盗摄| 99日韩精品| 99亚洲一区二区| 国产欧美另类| 中文亚洲字幕| 先锋影音国产一区| 亚洲一区尤物| 久久中文字幕一区二区三区| 久热国产精品| 国产精品初高中精品久久| 黑丝一区二区三区| 99国产精品| 久久aⅴ乱码一区二区三区| 久久免费一区| 在线看片一区| 国产婷婷精品| 欧美/亚洲一区| 极品日韩av| 国产欧美日韩一区二区三区在线| 国产亚洲毛片| 久久久久久九九九九| 久久久精品性| 精品福利电影| 免费久久久一本精品久久区| 欧美日韩免费精品| 亚洲少妇一区| 欧美激情1区2区| 99精品视频免费| 久久亚洲高清| 99国产精品| 欧美99久久| av不卡在线| 欧美欧美天天天天操| aa国产精品| 国产伊人精品| 免费在线亚洲| 亚洲三级影院| 午夜精品视频| 国产一区二区你懂的| 欧美午夜免费| 美女被久久久| 国产日韩欧美一区二区三区在线观看| 久久亚洲色图| 国产精品免费看| 亚洲大胆视频| 国产精品二区在线| 久久人人97超碰国产公开结果| 在线 亚洲欧美在线综合一区| 久久精品综合一区| 宅男噜噜噜66国产日韩在线观看| 欧美1区2区视频| 欧美中文字幕| 国产视频不卡| 亚洲精品国产日韩| 欧美视频在线观看| 欧美在线资源| 久久国产日韩| 噜噜噜噜噜久久久久久91| 亚洲人人精品| 在线日韩视频| 国内精品国语自产拍在线观看| 久久免费99精品久久久久久| 一区二区三区av| 99综合视频| 夜夜爽99久久国产综合精品女不卡| 黄色一区三区| 黄色成人在线网址| 亚洲网站视频| 在线观看欧美亚洲| 亚洲一级高清| 亚洲国产专区| 999亚洲国产精| 亚洲黄色一区二区三区| 永久域名在线精品| 亚洲第一黄色| 亚洲精品日韩久久| 9久re热视频在线精品| 91久久国产自产拍夜夜嗨| 亚洲大黄网站| 一区二区三区国产盗摄| 一区二区三区偷拍| 亚洲一区日韩| 欧美成人免费在线| 欧美网站在线| 999在线观看精品免费不卡网站| 一本色道久久综合亚洲精品不卡 | 亚洲免费激情| 国产日韩一区二区三区在线播放| 一本一道久久综合狠狠老精东影业| 99精品国产99久久久久久福利| 国产欧美日韩一区二区三区| 国产女主播一区二区| 麻豆亚洲精品| 国产精品国色综合久久| 亚洲黄色成人久久久| 国产亚洲欧美另类一区二区三区| 国产一级精品aaaaa看| 麻豆成人小视频| 国产综合久久| 国产精品亚洲一区| 午夜国产精品视频| 日韩亚洲视频| 老司机精品久久| 亚洲精品一级| 牛牛国产精品| 亚洲精品一品区二品区三品区| 亚洲欧美日韩综合国产aⅴ| 久久久久久亚洲精品杨幂换脸| 亚洲一二三区精品| 久久福利电影| 亚洲国产精品一区二区第一页| 免费永久网站黄欧美| 黄色成人在线网址| 每日更新成人在线视频| 影音先锋日韩资源| 久久字幕精品一区| 亚洲欧洲综合| 欧美日韩亚洲在线| 香蕉视频成人在线观看| 在线成人www免费观看视频| 美女精品网站| 国产欧美日韩一区二区三区在线| 女人香蕉久久**毛片精品| 一本色道久久综合亚洲精品不 | 一本一本久久a久久精品综合妖精| 亚洲综合国产| 亚洲精品九九| 韩国一区二区三区美女美女秀| 国产精品区一区| 亚洲国产裸拍裸体视频在线观看乱了中文| 免费不卡亚洲欧美| 国产欧美成人|