展开全部

package com.szallcom.tools;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Frame;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.geom.Line2D;

import java.awt.geom.Rectangle2D;

import java.awt.print.PageFormat;

import java.awt.print.PrinterException;

import java.awt.print.PrinterJob;

import javax.swing.JButton;

import javax.swing.JDialog;

import javax.swing.JPanel;

import wf.common.SystemProperties;

public class PrintPreviewDialog extends JDialog implements ActionListener{

private JButton nextButton = new JButton("Next");

private JButton previousButton = new JButton("Previous");

private JButton closeButton = new JButton("Close");

private JPanel buttonPanel = new JPanel();

private PreviewCanvas canvas;

public PrintPreviewDialog(Frame parent, String title, boolean modal,

62616964757a686964616fe4b893e5b19e31333330326631PrintTest pt, String str) {

super(parent, title, modal);

canvas = new PreviewCanvas(pt, str);

setLayout();

}

private void setLayout() {

this.getContentPane().setLayout(new BorderLayout());

this.getContentPane().add(canvas, BorderLayout.CENTER);

nextButton.setMnemonic('N');

nextButton.addActionListener(this);

buttonPanel.add(nextButton);

previousButton.setMnemonic('N');

previousButton.addActionListener(this);

buttonPanel.add(previousButton);

closeButton.setMnemonic('N');

closeButton.addActionListener(this);

buttonPanel.add(closeButton);

this.getContentPane().add(buttonPanel, BorderLayout.SOUTH);

this.setBounds((int) ((SystemProperties.SCREEN_WIDTH - 400) / 2),

(int) ((SystemProperties.SCREEN_HEIGHT - 400) / 2), 400, 400);

}

public void actionPerformed(ActionEvent evt) {

Object src = evt.getSource();

if (src == nextButton)

nextAction();

else if (src == previousButton)

previousAction();

else if (src == closeButton)

closeAction();

}

private void closeAction() {

this.setVisible(false);

this.dispose();

}

private void nextAction() {

canvas.viewPage(1);

}

private void previousAction() {

canvas.viewPage(-1);

}

class PreviewCanvas extends JPanel {

private String printStr;

private int currentPage = 0;

private PrintTest preview;

public PreviewCanvas(PrintTest pt, String str) {

printStr = str;

preview = pt;

}

public void paintComponent(Graphics g) {

super.paintComponent(g);

Graphics2D g2 = (Graphics2D) g;

PageFormat pf = PrinterJob.getPrinterJob().defaultPage();

double xoff;

double yoff;

double scale;

double px = pf.getWidth();

double py = pf.getHeight();

double sx = getWidth() - 1;

double sy = getHeight() - 1;

if (px / py < sx / sy) {

scale = sy / py;

xoff = 0.5 * (sx - scale * px);

yoff = 0;

} else {

scale = sx / px;

xoff = 0;

yoff = 0.5 * (sy - scale * py);

}

g2.translate((float) xoff, (float) yoff);

g2.scale((float) scale, (float) scale);

Rectangle2D page = new Rectangle2D.Double(0, 0, px, py);

g2.setPaint(Color.white);

g2.fill(page);

g2.setPaint(Color.black);

g2.draw(page);

try {

preview.print(g2, pf, currentPage);

} catch (PrinterException pe) {

g2.draw(new Line2D.Double(0, 0, px, py));

g2.draw(new Line2D.Double(0, px, 0, py));

}

}

public void viewPage(int pos) {

int newPage = currentPage + pos;

if (0 <= newPage && newPage < preview.getPagesCount(printStr)) {

currentPage = newPage;

repaint();

}

}

}

}

package wf.common;

import java.awt.Dimension;

import java.awt.Font;

import java.awt.GraphicsEnvironment;

import java.awt.Toolkit;

public final class SystemProperties {

public static final double SCREEN_WIDTH = Toolkit.getDefaultToolkit().getScreenSize().getWidth();

public static final double SCREEN_HEIGHT = Toolkit.getDefaultToolkit().getScreenSize().getHeight();

public static final String USER_DIR = System.getProperty("user.dir");

public static final String USER_HOME = System.getProperty("user.home");

public static final String USER_NAME = System.getProperty("user.name");

public static final String FILE_SEPARATOR = System.getProperty("file.separator");

public static final String LINE_SEPARATOR = System.getProperty("line.separator");

public static final String PATH_SEPARATOR = System.getProperty("path.separator");

public static final String JAVA_HOME = System.getProperty("java.home");

public static final String JAVA_VENDOR = System.getProperty("java.vendor");

public static final String JAVA_VENDOR_URL = System.getProperty("java.vendor.url");

public static final String JAVA_VERSION = System.getProperty("java.version");

public static final String JAVA_CLASS_PATH = System.getProperty("java.class.path");

public static final String JAVA_CLASS_VERSION = System.getProperty("java.class.version");

public static final String OS_NAME = System.getProperty("os.name");

public static final String OS_ARCH = System.getProperty("os.arch");

public static final String OS_VERSION = System.getProperty("os.version");

public static final String[] FONT_NAME_LIST = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();

public static final Font[] FONT_LIST = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();

}

本回答由网友推荐

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

java 预览打印_请问JAVA如何实现打印及打印预览功能?相关推荐

  1. java反射的优化_请问Java反射的性能为什么比直接调用慢一个数量级左右?

    Method.invoke()本身要用数组包装参数:而且每次调用都必须检查方法的可见性(在Method.invoke()里),也必须检查每个实际参数与形式参数的类型匹配性(在NativeMethodA ...

  2. java socket 回调函数_请问Java网络编程如何在不使用多线程的情况下实现异步返回?...

    我指的是在不使用多线程的情况下进行并发处理 具体的情况是,在不使用多线程的情况下,服务器侦听某个端口,在有连接进来的时候会调用某个函数对此连接进行处理,但是由于处理的过程可能会比较长,为了不让后面连接 ...

  3. java怎么计算时间差_请问java怎么计算时间差

    比如:现在是2004-03-26 13:31:40 过去是:2004-01-02 11:30:24 我现在要获得两个日期差,差的形式为:XX天XX小时XX分XX秒 方法一: DateFormat df ...

  4. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  5. java 启动内存参数_请问该如何设置Java虚拟机JVM启动内存参数?

    jps(JVM Process Status Tool):JVM机进程状况工具 用来查看基于HotSpot JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等等.与unix上的ps类似,用 ...

  6. java 批量打印_用java怎样实现批量打印

    展开全部 下面是实现Java批量打印功能的具体工具类,其中的Info类和UserClass为具体的快递面单中要打印的信息e68a8462616964757a686964616f313333633839 ...

  7. java多线程交替打印_使用Java实现三个线程交替打印0-74

    使用Java实现三个线程交替打印0-74 题目分析 三个线程交替打印,即3个线程是按顺序执行的.一个线程执行完之后,唤醒下一个线程,然后阻塞,等待被该线程的上一个线程唤醒.执行的顺序是一个环装的队列 ...

  8. java编译后生成字节码_请问java源文件编译后怎么生成字节码文件?

    比如,有的java源程序生成一个字节码文件,带有内部类的生成两个.可是有一种情况怎么回事呢?importjava.awt.*;importjavax.swing.*;importjava.awt.ev ...

  9. 基于java的车辆维护系统设计_基于JAVA的汽车维修管理系统的设计与实现.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspJava 基于JAVA的汽车维修管理系统的设计与实现.doc35 ...

最新文章

  1. mongoDB - 日常操作四
  2. oracle 定时任务 job 调用存储过程有回到输出参数(含out参数)
  3. 1的恢复出厂设置在哪里_无线路由器怎么恢复出厂设置
  4. python图像锐化_Python图像处理介绍--图像模糊与锐化
  5. 谁说数学没有用?披着小学数学外衣的,经典程序员面试题!
  6. 周鸿祎谈华为鸿蒙系统;百度回应“用搜索引擎填高考志愿”;腾讯首次全面公开开源路线图 | 极客头条...
  7. c语言课程建设与改革,C语言程序设计课程教学改革的研究与实践
  8. 辽宁移动客服呼叫中心两级质检管理效果佳
  9. QProgressDialog setValue过快导致死机问题记录
  10. 盗火:硅谷、海豹突击队和疯狂科学家如何变革我们的工作和生活
  11. cs_Censorship_CreateUpdateDelete///cs_Censorships_Get
  12. Big Sur 系统无法修改系统文件
  13. 《微信小程序案例12》图片识别功能
  14. Java 第5、8、9章复习
  15. 1296: 植树问题(C语言)
  16. SPH算法简介(三): 光滑核函数
  17. sql中的窗口函数:lead,lag
  18. 分享一些大公司团队的代码
  19. 阿里云ECS服务器配置全攻略 1
  20. C练题笔记之:Leetcode-136. 只出现一次的数字

热门文章

  1. Python strip()方法
  2. matlab海杂波统计建模及CFAR阈值分割
  3. 通过jsp向mysql批量导入数据_通过JSP+JavaBean对mysql进行添加数据的操作
  4. 制作老毛桃启动盘教程
  5. Type.GetType()在跨程序集反射时返回null的解决方法
  6. 密码学的骰子——随机数
  7. UEFI启动阶段学习SEC阶段和PEI阶段_2020-05-12
  8. 前端性能自动化执行机服务开发
  9. centos修改系统可用内存_centos7开启交换内存
  10. 2020中科大计算机分数线,2020年中国科学技术大学强基计划入围分数线,录取分数线,中国科大强基计划笔试、面试...