跪求关于java .swing中的打印的代码 我用 java,swing实现了一个系统,最后有要打印的东西,请问各位高手怎么实现,当点击打印按钮时就把当前内容打印出来阿 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 此回复为自动发出,仅用于显示而已,并无任何其他特殊作用楼主【changml0929】截止到2008-06-30 15:28:15的历史汇总数据(不包括此帖):发帖数:29 发帖分:600 结贴数:5 结贴分:100 未结数:24 未结分:500 结贴率:17.24 % 结分率:16.67 % 内容比较多你去搜一下OpenSwing,那里面有个例子的我之前写的记事本里面用的打印就是参考它的 打印什么,是不是报表?可以看看jasperReport和jaspeAssistant 网上抄的,你看能用不import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.font.FontRenderContext;import java.awt.print.PageFormat;import java.awt.print.Printable;import java.awt.print.PrinterException;import java.awt.print.PrinterJob;import javax.swing.JOptionPane;public class TempTest implements Printable { /** * @param args */ public static void main(String[] args) { TempTest tt = new TempTest(); } private String printStr; private int PAGES; public TempTest() { this.printTextAction(); } public int print(Graphics g, PageFormat pf, int page) throws PrinterException { Graphics2D g2 = (Graphics2D) g; g2.setPaint(Color.black); // 设置打印颜色为黑色 if (page >= PAGES) // 当打印页号大于需要打印的总页数时,打印工作结束 return Printable.NO_SUCH_PAGE; g2.translate(pf.getImageableX(), pf.getImageableY());// 转换坐标,确定打印边界 drawCurrentPageText(g2, pf, page); // 打印当前页文本 return Printable.PAGE_EXISTS; // 存在打印页时,继续打印工作 } /* 打印指定页号的具体文本内容 */ private void drawCurrentPageText(Graphics2D g2, PageFormat pf, int page) { String s = getDrawText(printStr)[page];// 获取当前页的待打印文本内容 // 获取默认字体及相应的尺寸 FontRenderContext context = g2.getFontRenderContext(); Font f = g2.getFont(); String drawText; float ascent = 16; // 给定字符点阵 int k, i = f.getSize(), lines = 0; while (s.length() > 0 && lines < 54) // 每页限定在54行以内 { k = s.indexOf('\n'); // 获取每一个回车符的位置 if (k != -1) // 存在回车符 { lines += 1; // 计算行数 drawText = s.substring(0, k); // 获取每一行文本 g2.drawString(drawText, 0, ascent); // 具体打印每一行文本,同时走纸移位 if (s.substring(k + 1).length() > 0) { s = s.substring(k + 1); // 截取尚未打印的文本 ascent += i; } } else // 不存在回车符 { lines += 1; // 计算行数 drawText = s; // 获取每一行文本 g2.drawString(drawText, 0, ascent); // 具体打印每一行文本,同时走纸移位 s = ""; // 文本已结束 } } } /* 将打印目标文本按页存放为字符串数组 */ public String[] getDrawText(String s) { String[] drawText = new String[PAGES];// 根据页数初始化数组 for (int i = 0; i < PAGES; i++) drawText[i] = ""; // 数组元素初始化为空字符串 int k, suffix = 0, lines = 0; while (s.length() > 0) { if (lines < 54) // 不够一页时 { k = s.indexOf('\n'); if (k != -1) // 存在回车符 { lines += 1; // 行数累加 // 计算该页的具体文本内容,存放到相应下标的数组元素 drawText[suffix] = drawText[suffix] + s.substring(0, k + 1); if (s.substring(k + 1).length() > 0) s = s.substring(k + 1); } else { lines += 1; // 行数累加 // 将文本内容存放到相应的数组元素 drawText[suffix] = drawText[suffix] + s; s = ""; } } else // 已满一页时 { lines = 0; // 行数统计清零 suffix++; // 数组下标加1 } } return drawText; } public int getPagesCount(String curStr) { int page = 0; int position, count = 0; String str = curStr; while (str.length() > 0) // 文本尚未计算完毕 { position = str.indexOf('\n'); // 计算回车符的位置 count += 1; // 统计行数 if (position != -1) str = str.substring(position + 1); // 截取尚未计算的文本 else str = ""; // 文本已计算完毕 } if (count > 0) page = count / 54 + 1; // 以总行数除以54获取总页数 return page; // 返回需打印的总页数 } private void printTextAction() { // printStr = area.getText().trim(); // 获取需要打印的目标文本 printStr = "aaaaa"; // 获取需要打印的目标文本 if (printStr != null && printStr.length() > 0) // 当打印内容不为空时 { PAGES = getPagesCount(printStr); // 获取打印总页数 PrinterJob myPrtJob = PrinterJob.getPrinterJob(); // 获取默认打印作业 PageFormat pageFormat = myPrtJob.defaultPage(); // 获取默认打印页面格式 myPrtJob.setPrintable(this, pageFormat); // 设置打印工作 if (myPrtJob.printDialog()) // 显示打印对话框 { try { myPrtJob.print(); // 进行每一页的具体打印操作 } catch (PrinterException pe) { pe.printStackTrace(); } } } else { // 如果打印内容为空时,提示用户打印将取消 JOptionPane.showConfirmDialog( null, "Sorry, Printer Job is Empty, Print Cancelled!", "Empty", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE); } }} 对 搜索一下OpenSwing的demo曾经看过这个的介绍不过现在找不到了 这样的java接口该如何写? 怎样用字节数组在本地文件系统生成图像 java怎么样杀掉一个占用了某某端口的java进程? 我发现swing中的JFrame的一个问题!! split()怎么了? socket 如何将从服务器端输出的图片在客户端显示? 想用JAVA做一个类似于WINDOWS资源管理器的界面。谁有例子? 我贴的帖子为什么总是莫名其妙没了? 我想搭建一个java的运行环境,都需要什么,具体一点。请高手指点 何为Automatic variable(自动变量)? java程序优化,集思广益,工作中深有体会 java1.6的API中文版
楼主【changml0929】截止到2008-06-30 15:28:15的历史汇总数据(不包括此帖):
发帖数:29 发帖分:600
结贴数:5 结贴分:100
未结数:24 未结分:500
结贴率:17.24 % 结分率:16.67 %
你去搜一下OpenSwing,那里面有个例子的
我之前写的记事本里面用的打印就是参考它的
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.font.FontRenderContext;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;import javax.swing.JOptionPane;public class TempTest implements Printable { /**
* @param args
*/
public static void main(String[] args) {
TempTest tt = new TempTest();
} private String printStr; private int PAGES; public TempTest() {
this.printTextAction();
} public int print(Graphics g, PageFormat pf, int page) throws PrinterException {
Graphics2D g2 = (Graphics2D) g;
g2.setPaint(Color.black); // 设置打印颜色为黑色
if (page >= PAGES) // 当打印页号大于需要打印的总页数时,打印工作结束
return Printable.NO_SUCH_PAGE;
g2.translate(pf.getImageableX(), pf.getImageableY());// 转换坐标,确定打印边界
drawCurrentPageText(g2, pf, page); // 打印当前页文本
return Printable.PAGE_EXISTS; // 存在打印页时,继续打印工作
} /* 打印指定页号的具体文本内容 */
private void drawCurrentPageText(Graphics2D g2, PageFormat pf, int page) {
String s = getDrawText(printStr)[page];// 获取当前页的待打印文本内容
// 获取默认字体及相应的尺寸
FontRenderContext context = g2.getFontRenderContext();
Font f = g2.getFont();
String drawText;
float ascent = 16; // 给定字符点阵
int k, i = f.getSize(), lines = 0;
while (s.length() > 0 && lines < 54) // 每页限定在54行以内
{
k = s.indexOf('\n'); // 获取每一个回车符的位置
if (k != -1) // 存在回车符
{
lines += 1; // 计算行数
drawText = s.substring(0, k); // 获取每一行文本
g2.drawString(drawText, 0, ascent); // 具体打印每一行文本,同时走纸移位
if (s.substring(k + 1).length() > 0) {
s = s.substring(k + 1); // 截取尚未打印的文本
ascent += i;
}
} else // 不存在回车符
{
lines += 1; // 计算行数
drawText = s; // 获取每一行文本
g2.drawString(drawText, 0, ascent); // 具体打印每一行文本,同时走纸移位
s = ""; // 文本已结束
}
}
} /* 将打印目标文本按页存放为字符串数组 */
public String[] getDrawText(String s) {
String[] drawText = new String[PAGES];// 根据页数初始化数组
for (int i = 0; i < PAGES; i++)
drawText[i] = ""; // 数组元素初始化为空字符串 int k, suffix = 0, lines = 0;
while (s.length() > 0) {
if (lines < 54) // 不够一页时
{
k = s.indexOf('\n');
if (k != -1) // 存在回车符
{
lines += 1; // 行数累加
// 计算该页的具体文本内容,存放到相应下标的数组元素
drawText[suffix] = drawText[suffix] + s.substring(0, k + 1);
if (s.substring(k + 1).length() > 0) s = s.substring(k + 1);
} else {
lines += 1; // 行数累加
// 将文本内容存放到相应的数组元素
drawText[suffix] = drawText[suffix] + s;
s = "";
}
} else // 已满一页时
{
lines = 0; // 行数统计清零
suffix++; // 数组下标加1
}
}
return drawText;
} public int getPagesCount(String curStr) {
int page = 0;
int position, count = 0;
String str = curStr;
while (str.length() > 0) // 文本尚未计算完毕
{
position = str.indexOf('\n'); // 计算回车符的位置
count += 1; // 统计行数
if (position != -1) str = str.substring(position + 1); // 截取尚未计算的文本
else
str = ""; // 文本已计算完毕
}
if (count > 0) page = count / 54 + 1; // 以总行数除以54获取总页数
return page; // 返回需打印的总页数
} private void printTextAction() {
// printStr = area.getText().trim(); // 获取需要打印的目标文本
printStr = "aaaaa"; // 获取需要打印的目标文本
if (printStr != null && printStr.length() > 0) // 当打印内容不为空时
{
PAGES = getPagesCount(printStr); // 获取打印总页数
PrinterJob myPrtJob = PrinterJob.getPrinterJob(); // 获取默认打印作业
PageFormat pageFormat = myPrtJob.defaultPage(); // 获取默认打印页面格式
myPrtJob.setPrintable(this, pageFormat); // 设置打印工作
if (myPrtJob.printDialog()) // 显示打印对话框
{
try {
myPrtJob.print(); // 进行每一页的具体打印操作
} catch (PrinterException pe) {
pe.printStackTrace();
}
}
} else {
// 如果打印内容为空时,提示用户打印将取消
JOptionPane.showConfirmDialog(
null,
"Sorry, Printer Job is Empty, Print Cancelled!",
"Empty",
JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE);
}
}}
曾经看过这个的介绍
不过现在找不到了