如何打印Jtable内容 各位仁人志士,小弟做了个Jtble表现数据(表格列太多,屏幕无法足够显示)...现在想做个打印部分内容(可选),请问如何实现?谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 打印那部分jtable的api里有就不给你说了,至于可选打印,你可以新建个panel把选择的数据绘制到那个panel上,然后打印,这样简单些 报错了啊...Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: sun.print.ProxyPrintGraphics cannot be cast to java.awt.Graphics2D源码: private void printTable() { Toolkit kit = Toolkit.getDefaultToolkit(); //获取工具箱 Properties props = new Properties(); props.put("awt.print.printer", "durango"); //设置打印属性 props.put("awt.print.numCopies", "2"); if (kit != null) {//获取工具箱自带的打印对象 PrintJob printJob = kit.getPrintJob(JHDDemo.this, "打印 页面", props); if (printJob != null) { Graphics pg = printJob.getGraphics(); //获取打印对象的图形环境 Graphics2D g2 = (Graphics2D) pg; /// PageFormat pf = new PageFormat(); /// g2.translate(pf.getImageableX(), pf.getImageableY()); ///转换坐标,确定打印边界 if (pg != null) { try { pg.dispose(); // Shoot the page to printer this.table.printAll(pg); //打印该窗体的组件 } finally { pg.dispose(); //注销图形环境pageIndex } } printJob.end(); //结束打印作业 } } } printJob.getGraphics()不能转换成g2,只能把当前的panel画成图片存在内存中,然后对这张图片进行缩放处理 http://download.csdn.net/source/763069这里有下载和使用方法 import java.awt.print.*; import java.awt.*; import javax.print.*; import javax.print.attribute.*; import javax.swing.*; import javax.swing.table.*; class PrintReport implements Printable{ private TableModel table; private String title; public PrintReport(JTable table,String title){ this.table=table.getModel(); this.title=title; PrintService[] services=PrintServiceLookup.lookupPrintServices( DocFlavor.SERVICE_FORMATTED.PRINTABLE,null ); if(services.length<1) new ErrorDialog("No printer available!"); else{ PrintRequestAttributeSet attributes=new HashPrintRequestAttributeSet(); PrintService service=ServiceUI.printDialog(null,50,50,services,services[0],null,attributes); if(service!=null){ DocPrintJob job=service.createPrintJob(); try{ Doc doc=new SimpleDoc(this,DocFlavor.SERVICE_FORMATTED.PRINTABLE,null); job.print(doc,attributes); }catch(PrintException pe){ pe.printStackTrace(); } } } } public int print(Graphics g,PageFormat pf,int pageIndex){ if(pageIndex==0){ Graphics2D g2d=(Graphics2D)g; g2d.translate(pf.getImageableX(),pf.getImageableY()); g2d.setColor(Color.black); g2d.drawString(title,0,20); for(int i=0;i<table.getColumnCount();i++){ g2d.drawString(table.getColumnName(i),i*100,40); } for(int i=0;i<table.getRowCount();i++){ for(int ii=0;ii<table.getColumnCount();ii++){ String cell; Object original=table.getValueAt(i,ii); if(original==null) cell=""; else cell=original.toString(); g2d.drawString(cell,ii*100,60+i*20); } } return Printable.PAGE_EXISTS; }else return Printable.NO_SUCH_PAGE; } } 使用socket传送文件时,如何把文件名和文件类型也通过socket传送给服务器? JAVA模拟IE浏览器,如何保留会话? jni 异常Exception in thread "main" java.lang.UnsatisfiedLinkError: Usb_ChangePin sql 得不到正确结果 急问问一个问题,谢谢大家 刚从C++转过来,请教几个基本问题,请指教。 java如何绘制动态的曲线 一个基础问题 我想将在程序一运行时,就把焦点设置在一个JTextArea内,该用什么函数? 考过SCJP的大虾们请进!! dll 调用另一个dll sql连接问题
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: sun.print.ProxyPrintGraphics cannot be cast to java.awt.Graphics2D
源码:
private void printTable() {
Toolkit kit = Toolkit.getDefaultToolkit(); //获取工具箱
Properties props = new Properties();
props.put("awt.print.printer", "durango"); //设置打印属性
props.put("awt.print.numCopies", "2"); if (kit != null) {
//获取工具箱自带的打印对象
PrintJob printJob = kit.getPrintJob(JHDDemo.this, "打印 页面", props); if (printJob != null) {
Graphics pg = printJob.getGraphics(); //获取打印对象的图形环境
Graphics2D g2 = (Graphics2D) pg; ///
PageFormat pf = new PageFormat(); ///
g2.translate(pf.getImageableX(), pf.getImageableY()); ///转换坐标,确定打印边界
if (pg != null) {
try {
pg.dispose(); // Shoot the page to printer
this.table.printAll(pg); //打印该窗体的组件
} finally {
pg.dispose(); //注销图形环境pageIndex
}
}
printJob.end(); //结束打印作业
}
}
}
import java.awt.*;
import javax.print.*;
import javax.print.attribute.*;
import javax.swing.*;
import javax.swing.table.*;
class PrintReport implements Printable{
private TableModel table;
private String title;
public PrintReport(JTable table,String title){
this.table=table.getModel();
this.title=title;
PrintService[] services=PrintServiceLookup.lookupPrintServices(
DocFlavor.SERVICE_FORMATTED.PRINTABLE,null
);
if(services.length<1) new ErrorDialog("No printer available!");
else{
PrintRequestAttributeSet attributes=new HashPrintRequestAttributeSet();
PrintService service=ServiceUI.printDialog(null,50,50,services,services[0],null,attributes);
if(service!=null){
DocPrintJob job=service.createPrintJob();
try{
Doc doc=new SimpleDoc(this,DocFlavor.SERVICE_FORMATTED.PRINTABLE,null);
job.print(doc,attributes);
}catch(PrintException pe){
pe.printStackTrace();
}
}
}
}
public int print(Graphics g,PageFormat pf,int pageIndex){
if(pageIndex==0){
Graphics2D g2d=(Graphics2D)g;
g2d.translate(pf.getImageableX(),pf.getImageableY());
g2d.setColor(Color.black);
g2d.drawString(title,0,20);
for(int i=0;i<table.getColumnCount();i++){
g2d.drawString(table.getColumnName(i),i*100,40);
}
for(int i=0;i<table.getRowCount();i++){
for(int ii=0;ii<table.getColumnCount();ii++){
String cell;
Object original=table.getValueAt(i,ii);
if(original==null) cell="";
else cell=original.toString();
g2d.drawString(cell,ii*100,60+i*20);
}
}
return Printable.PAGE_EXISTS;
}else return Printable.NO_SUCH_PAGE;
}
}