我只需要打印几个字出来就可以了,这里面怎么那么麻烦呀!都是使用image
大哥们来帮帮我了

解决方案 »

  1.   


    import javax.swing.*;
    import java.awt.HeadlessException;
    import java.awt.event.*;
    import java.awt.print.*;public class Test extends JFrame
    {
          JButton b_print = new JButton("打印");
          public Test() throws HeadlessException
          {
                setSize(300, 300);
                b_print.addActionListener(new ActionListener() {
                      public void actionPerformed(ActionEvent e)
                      {
                            PrinterJob printerJob = PrinterJob.getPrinterJob();
                            PageFormat pageFormat = printerJob.defaultPage();
                            PrintTest printTest = new PrintTest();
                            pageFormat.setOrientation(PageFormat.PORTRAIT);
                            printerJob.setPrintable(printTest, pageFormat);                        if (printerJob.printDialog()) {
                              try {
                                printerJob.print();
                              }
                              catch (PrinterException ex) {
                                ex.printStackTrace();
                                JOptionPane.showMessageDialog(null, "出错了:" + ex.getMessage(),
                                                              "错误", JOptionPane.ERROR_MESSAGE);
                              }
                            }                  }
                });            this.getContentPane().add(b_print);
                setDefaultCloseOperation(this.EXIT_ON_CLOSE);      }
          public static void main(String[] args) throws HeadlessException
          {
                Test test1 = new Test();
                test1.show();
          }}import java.awt.print.Printable;
    import java.awt.print.PageFormat;
    import java.awt.Graphics;public class PrintTest implements Printable
    {
          public PrintTest()
          {
          }      /**
           * 重载的print方法,使用graphics绘制要打印的数据,参数说明参见父类的print方法
           * @param graphics
           * @param pageFormat
           * @param pageIndex
           * @return
           * @throws java.awt.print.PrinterException
           */
          public int print(Graphics graphics, PageFormat pageFormat,
                           int pageIndex) throws java.awt.print.PrinterException
          {
                //转变打印范围为pageFormat的可打印范围
                graphics.translate( (int)pageFormat.getImageableX(),
                                   (int)pageFormat.getImageableY());            if(pageIndex == 0){
                      graphics.drawString("第一页", 20, 20);
                      return PAGE_EXISTS;
                }else if(pageIndex == 1){
                      graphics.drawString("第二页", 20, 20);
                      return PAGE_EXISTS;
                }
                return NO_SUCH_PAGE;
          }}
      

  2.   

    没有HeadlessException,自己写吗?
      

  3.   

    package Tools;import java.awt.Component;
    import java.awt.print.*;public class SinglePagePrint
            extends Thread {
        Component myComponent;
        public SinglePagePrint(Component component)
        {
            this.myComponent = component;
        }    public void run()
        {
            PrinterJob job = PrinterJob.getPrinterJob();
            Book book = new Book();
            PageFormat pf = job.pageDialog(job.defaultPage());
            DoSinglePrint pff = new DoSinglePrint(this.myComponent);
            book.append(pff, pf, 1);
            job.setPageable(book);
            if (job.printDialog()) {
                try {
                    job.print();
                }
                catch (PrinterException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    package Tools;import java.awt.*;
    import java.awt.print.*;/**
     * <p>Title: </p>
     * <p>Description: </p>
     * <p>Copyright: Copyright (c) 2003</p>
     * <p>Company: </p>
     * @author not attributable
     * @version 1.0
     */public class DoSinglePrint
            implements Printable {
        Component myComponent;
        public DoSinglePrint(Component component)
        {
            this.myComponent = component;
        }    public int print(Graphics g, PageFormat pf, int pageIndex)
                throws PrinterException
        {
            if (pageIndex > 1) {
                return Printable.NO_SUCH_PAGE;
            }
            else {
                Graphics2D g2 = (Graphics2D) g;
                double scale = 1;
                double sc1 = pf.getImageableWidth() / myComponent.getWidth();
                double sc2 = pf.getImageableHeight() / myComponent.getHeight();
                double sc = Math.min(sc1, sc2);
                if (sc < 1) {
                    scale = sc;
                }
                g2.translate(pf.getImageableX(), pf.getImageableY());
                g2.scale(scale, scale);
                this.myComponent.paint(g2); 
                return Printable.PAGE_EXISTS;
            }
        }
    }
    一个单页打印程序具体用法如下:
    new SinglePagePrint(this.WellCanvas).start();
      

  4.   

    我要打印格式控制为:
        aa  
        aa  aa  aa  aaa  aaa  aaaa  a
        aa  aa  aa  aaa  aaa  aaaa
        aa  aa  aa  aaa  aaa  aaaa  a
    也就是说,第一行可能只有一点,第二行和第三行有可能不大一样
    是不是从继承来的public int print(Graphics g, PageFormat pf, int pageIndex)
                throws PrinterException
        里面控制???
      

  5.   

    为什么要用print方法控制打印格式呢? 我上面的 class SinglePagePrint可以打印任何可视化的组件, 你可将要打印的内容先输出到一个Panel中,再用SinglePagePrint 把Panel打印出来
      

  6.   

    to:hui3zhihui(慧慧)
    import java.awt.HeadlessException;
    对于你的要求,用crazyboy123(狂徒)的方法更好些,不过对于一些复杂的打印,就不能达到效果了
      

  7.   

    this.WellCanvas 是要打印的组件,实际使用中可替换为你自己的组件例如一个Panel。
    上面的代码只是一个单页可自动缩小的打印组件,其他自适应多页打印和长图连续打印组件代码太长,使用比较复杂我就不贴出来了。
      

  8.   

    由Panel控制显示格式,打印组件负责打印。软件的可读性和可维护性会好一点。
    你能具体说一下你要做什么吗?实现什么样的功能
      

  9.   

    我要打印的是从JTextField里面输入的,很多项,要一项一项的添加到Panel里面,还要设计格式
    ,应该是很难做吧!
      

  10.   

    TO:hui3zhihui(慧慧) 
    你们公司还要不要人啊?我来打工行不行?说真的
      

  11.   

    to:pxboy(阿土仔)
    呵呵,我是刚来,可能主任是看看我的水平吧!
      

  12.   

    那你直接把JTextField 的容器打出来不久可以了吗
      

  13.   

    可是我的JTextField的内容要一条一条的输入,然后存入数据库,不能一条一条的打印出来
      

  14.   

    我的JTextField里面的内容是一条一条的输入的,然后还要存入数据库里面
      

  15.   

    你先计算每页打印多少条,最好宽度不要超过打印纸,将每页的数据索引保存起来,然后根据pageIndex来获取每页的数据,如:int startX = 20;
    int startY = 20;
    for(int i=0; i<30; i++){
        graphics.drawString(paramVector.get(pageIndex), startX, startY);
        startY += 20;
    }
       
    这个paramVector保存每页的数据
      

  16.   

    是象表格一样的多页打印,还是类似票据一类的单页打印呢。
    不过先在Panel中输出可以看到打印结果,调试程序很方便。
    至于项目很多如有规律的话可以用循环语句.
      

  17.   

    每页都不一样,是内容不一样还是样式不一样。
    页数是固定的还是随记录数不同变化。
    CSDN刷新太慢,如有QQ可QQ聊。