各位仁人志士,小弟做了个Jtble表现数据(表格列太多,屏幕无法足够显示)...现在想做个打印部分内容(可选),请问如何实现?
谢谢

解决方案 »

  1.   

    打印那部分jtable的api里有就不给你说了,至于可选打印,你可以新建个panel把选择的数据绘制到那个panel上,然后打印,这样简单些
      

  2.   

    报错了啊...
    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(); //结束打印作业
                }
            }
        }
      

  3.   

    printJob.getGraphics()不能转换成g2,只能把当前的panel画成图片存在内存中,然后对这张图片进行缩放处理
      

  4.   

    http://download.csdn.net/source/763069这里有下载和使用方法
      

  5.   

    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;  
      }  
      }