是不是Panel里面的点和打印里面点的大小是不一样的啊?

解决方案 »

  1.   

    可是只有Graphics2D才可以设定scale,而Graphics没有,但printerJob获得的只能是Graphics,请问该怎么弄啊?
      

  2.   

    JAVA打印确实有点困难,我也在学习,可以参考一下文章:http://www-900.ibm.com/developerWorks/cn/java/l-javaprint/index.shtml
      

  3.   

    你可以把Panel的内容取出来,做成一个Book,在Book中设定打印的内容,这样比较灵活,自由度比较大。
      

  4.   

    to draco2002(Draco):
       我就是按照这个里面做的,呵呵。to bingle0729(月黑风高):
       Book能不能把要打印的内容缩小?(要打印的内容是图形)
      

  5.   

    Graphics2D g2 = (Graphics2D)Graphics;
      

  6.   

    很奇怪!
    如果如果
    Graphics2D g2 = (Graphics2D)Graphics;
    被转换类型的Graphics是JPanel.getGraphics();,那么就很正常。
    如果被转换类型的Graphics是printerJob.getGraphics();,那么就会抛掷出ClassCastException的异常。
    同是Graphics可为什么会这样?
      

  7.   

    import java.awt.*;
    import java.awt.event.*;
    import java.awt.print.*;import javax.swing.*; public class printpanel extends JPanel implements ActionListener, Printable {    public printpanel() {
    //setBackground(Color.white);
            JButton b = new JButton("MyButton");
            b.addActionListener(this);
            add(b);    }    public void actionPerformed(ActionEvent e) {
            PrinterJob printJob = PrinterJob.getPrinterJob();
            printJob.setPrintable(this);
            try { printJob.print(); } catch (Exception PrintException) { }
        }       public int print(Graphics g, PageFormat pf, int pi) throws PrinterException {
                if (pi >= 1) {
                    return Printable.NO_SUCH_PAGE;
                }
                
                Graphics2D g2d = (Graphics2D)g;
                g2d.translate(100, 100);
                g2d.scale(0.5, 0.5);
                Font  f = new Font("Monospaced",Font.PLAIN,12);
                
            g.setFont (f);
            paint (g);
                return Printable.PAGE_EXISTS;
    }    public static void main(String s[]) {
    WindowListener l = new WindowAdapter() {
        public void windowClosing(WindowEvent e) {System.exit(0);}
    };
    Frame f = new Frame("printbutton");
    f.addWindowListener(l);
    f.add("Center", new printpanel());
    f.pack();
    f.setSize(new Dimension(400,300));
    f.show();
        }
    }
    看看这个