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

Java打印和打印預覽機制實例代碼
來源:易賢網 閱讀:2558 次 日期: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打印和打印預覽機制實例代碼
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
欧美亚洲视频在线观看| 亚洲欧美色一区| 日韩视频一区二区三区| 久久伊伊香蕉| 亚洲国内精品| 欧美日韩一区二区在线观看| 一区二区日韩欧美| 国产精品资源在线观看| 久久国产精品久久w女人spa| 亚洲福利在线看| 欧美日韩中文另类| 羞羞色国产精品| 亚洲国内欧美| 欧美视频在线观看一区| 欧美一区中文字幕| 亚洲精品国产欧美| 国产九区一区在线| 美女脱光内衣内裤视频久久网站| 亚洲美女黄网| 一区二区三区在线观看视频| 欧美视频免费在线| 欧美国产在线视频| 久久久久久噜噜噜久久久精品| 99综合精品| 一区二区三区在线免费播放| 国产精品白丝av嫩草影院| 欧美国产高潮xxxx1819| 久久精品国产第一区二区三区最新章节 | 欧美激情一区二区三区四区| 亚洲一区国产视频| 国产日韩欧美电影在线观看| 欧美国产大片| 老鸭窝亚洲一区二区三区| 午夜国产精品影院在线观看| 亚洲人成小说网站色在线| 亚洲国产成人tv| 亚洲欧洲精品一区二区三区| 欧美一区二区三区视频免费播放| 国产综合久久久久影院| 欧美日韩亚洲一区二区三区在线| 久久久91精品国产一区二区精品| 亚洲主播在线播放| 这里只有精品电影| 欧美一区二粉嫩精品国产一线天| 欧美一区二区三区久久精品茉莉花| 亚洲一区二区三区四区五区黄| 一区二区精品在线观看| 午夜精品久久久久99热蜜桃导演| 欧美亚洲视频| 欧美激情视频一区二区三区在线播放 | 亚洲欧美日韩一区二区三区在线| 一区二区三区蜜桃网| 亚洲视频中文| 久久午夜电影| 欧美极品在线观看| 国产精品毛片在线看| 国产三级欧美三级| 亚洲国产婷婷香蕉久久久久久| 最新国产成人av网站网址麻豆| 亚洲精品一二| 亚洲一区二区三区777| 欧美一区二区日韩| 欧美成ee人免费视频| 国产精品福利片| 国产在线欧美日韩| 一区二区日韩免费看| 久久99伊人| 国产精品美女一区二区在线观看| 黄色成人小视频| 亚洲影视九九影院在线观看| 国产一级精品aaaaa看| 亚洲人成在线播放| 久久国内精品自在自线400部| 欧美大片在线观看一区二区| 国产精品羞羞答答| 亚洲视频一二| 欧美性开放视频| 亚洲美洲欧洲综合国产一区| 久久精品亚洲精品国产欧美kt∨| 国产精品成人一区二区三区吃奶 | 一本久久知道综合久久| 欧美va亚洲va香蕉在线| 国产精品美腿一区在线看 | 国产欧美69| 亚洲人久久久| 欧美激情第五页| 亚洲国产精品第一区二区三区| 久久青草欧美一区二区三区| 精品成人一区二区| 欧美精品色综合| 亚洲一级片在线观看| 国产欧美综合一区二区三区| 久久精品国产77777蜜臀| 一区二区自拍| 欧美另类专区| 亚洲自拍另类| 精品不卡一区| 欧美日韩精品一区二区天天拍小说| 亚洲永久视频| 永久域名在线精品| 欧美日韩一区二区免费视频| 亚洲视频在线二区| 伊人色综合久久天天| 欧美午夜精品理论片a级按摩| 亚洲综合色在线| 亚洲成人资源网| 国产精品欧美一区二区三区奶水| 久久福利影视| 99xxxx成人网| 韩曰欧美视频免费观看| 国产精品乱码一区二区三区| 久久男人资源视频| 亚洲天堂成人在线视频| 伊人久久大香线| 国产精品永久免费视频| 欧美人与禽性xxxxx杂性| 欧美一二三区精品| 亚洲一区二区三区在线看| 最新中文字幕亚洲| 一本色道久久综合亚洲精品婷婷 | 久久婷婷影院| 欧美中文在线视频| 亚洲午夜精品一区二区三区他趣| **网站欧美大片在线观看| 国产又爽又黄的激情精品视频| 国产精品国产精品国产专区不蜜| 欧美精品自拍| 欧美日韩国产精品自在自线| 猛男gaygay欧美视频| 蜜臀久久99精品久久久久久9| 久久se精品一区二区| 久久国产毛片| 久久全国免费视频| 免费成年人欧美视频| 欧美精品系列| 欧美视频福利| 国产亚洲a∨片在线观看| 尤物九九久久国产精品的分类| 亚洲国产中文字幕在线观看| 欧美丝袜一区二区| 国产精品va在线播放我和闺蜜| 激情久久综合| 国产精品久久久久高潮| 欧美日韩午夜激情| 亚洲国内自拍| 欧美日韩成人综合在线一区二区 | 欧美日韩成人一区二区三区| 亚洲直播在线一区| 亚洲黄色免费电影| 国产精品国产三级国产专播品爱网 | 欧美亚洲综合久久| 国产精品久久久久久av福利软件 | 在线看无码的免费网站| 欧美精品日本| 性高湖久久久久久久久| 精品69视频一区二区三区| 久久精品视频免费| 夜久久久久久| 国内精品视频在线观看| 99国产精品久久| 亚洲成人原创 | 国产九九精品| 久热精品视频| 久久久久国产精品麻豆ai换脸| 亚洲国内在线| 国产亚洲午夜高清国产拍精品| 欧美国产一区二区| 欧美在线视频二区| 一区二区久久久久久| 国内精品美女av在线播放| 国产精品毛片a∨一区二区三区| 男人的天堂亚洲在线| 久久精品国亚洲| 亚洲在线一区二区三区| 亚洲欧洲三级电影| 韩国美女久久| 国产日韩欧美中文在线播放| 欧美私人啪啪vps| 欧美日韩和欧美的一区二区| 欧美一区二区三区在线免费观看| 99一区二区| 99这里有精品| 亚洲国产天堂久久综合| 在线精品亚洲一区二区| 国产日韩精品一区| 国产精品人人做人人爽 | 欧美激情视频给我| 噜噜噜躁狠狠躁狠狠精品视频| 香蕉久久夜色精品国产使用方法| 亚洲视频电影图片偷拍一区| 亚洲乱码国产乱码精品精| 99riav国产精品| 亚洲理伦电影| 亚洲午夜一区二区三区| 伊人久久大香线| 在线免费不卡视频| 亚洲精选一区| 在线视频亚洲一区| 午夜影视日本亚洲欧洲精品| 久久激情视频|