2011-11-30 78 views
0

我需要一些关于我的代码的帮助。我需要做的是每次将页面添加到Java Book中,每次都需要在页面上显示不同的数据。我已经尝试了很多不同的方式,但我无法解决它!将参数传递给打印方法(JAVA)

这里是我的代码:

dataBase data = new dataBase(); 
int userCountAmount = data.getAmountOfUsers(); 
Book bk = new Book(); 
PrinterJob PJ = PrinterJob.getPrinterJob(); 
String[] pupilName = new String[userCountAmount]; 
String[] parentsName = new String[userCountAmount]; 
int parCount = 0; 
int pupCount = 0; 

public void print2() { 
    System.out.println(pupilName.length); 
    System.out.println(parentsName.length); 
    System.out.println(userCountAmount); 
    String[] custData = processData(data.getAllCustomers()); 

    PageFormat portrait = PJ.defaultPage(); 
    int pupNameCount = 0; 
    int parNameCount = 0; 
    portrait.setOrientation(PageFormat.PORTRAIT); 
    for (int i = 0; i < userCountAmount; i++) { 
     pupilName[i] = custData[pupNameCount]; 
     parentsName[i] = custData[parNameCount]; 
     System.out.println(custData[pupNameCount] + " " + custData[parNameCount]); 
     pupNameCount = pupNameCount + 13; 
     parNameCount = parNameCount + 13; 

     bk.append(new IntroPage(), PJ.defaultPage()); 
     parCount++; 
     pupCount++; 
     System.out.println(parCount+" " + pupCount); 
    } 
    // setWindow(); 
    //PageFormat PF = PJ.pageDialog(PJ.defaultPage()); 
    PJ.setPageable(bk); 

    // PJ.setPrintable((Printable) this); 
    boolean doPrint = PJ.printDialog(); 
    //JOptionPane.showMessageDialog(null, doPrint); 
    if (doPrint) { 
     try { 

      PJ.print(); 

     } catch (PrinterException ex) { 
      JOptionPane.showMessageDialog(null, ex.getMessage()); 
     } 
    } 
} 

private class IntroPage implements Printable { 

    /** 
    * Method: print 
    * <p> 
    * 
    * @param g 
    *   a value of type Graphics 
    * @param pageFormat 
    *   a value of type PageFormat 
    * @param page 
    *   a value of type int 
    * @return a value of type int 
    */ 
    public int print(Graphics g, PageFormat pageFormat, int page) { 

     //--- Create the Graphics2D object 
     Graphics2D g2d = (Graphics2D) g; 

     //--- Translate the origin to 0,0 for the top left corner 
     g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); 

     //--- Set the default drawing color to black and get date 
     g2d.setPaint(Color.black); 
     DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
     Date date = new Date(); 

     //draw tables 
     g2d.setPaint(Color.darkGray); 
     Rectangle2D.Double invoiceOut = new Rectangle2D.Double(10, 200, 400, 280); 
     Rectangle2D.Double invoiceDesc = new Rectangle2D.Double(10, 200, 200, 280); 
     Rectangle2D.Double invoiceSess = new Rectangle2D.Double(10, 200, 260, 280); 
     Rectangle2D.Double invoiceRate = new Rectangle2D.Double(10, 200, 330, 280); 
     Rectangle2D.Double invoiceTitle = new Rectangle2D.Double(10, 200, 400, 20); 
     Rectangle2D.Double totalAmount = new Rectangle2D.Double(340, 480, 70, 20); 
     g2d.draw(invoiceOut); 
     g2d.draw(invoiceDesc); 
     g2d.draw(invoiceSess); 
     g2d.draw(invoiceRate); 
     g2d.draw(invoiceTitle); 
     g2d.draw(totalAmount); 
     //table title strings 
     String descrp = "Description:"; 
     String sesh = "Sessions:"; 
     String rate = "Rate:"; 
     String amount = "Amount:"; 
     String titleText = "INVOICE"; 
     String totalAmountString = "Total Amount:"; 
     //Address Strings 
     String printDate = "Print Date: " + String.valueOf(dateFormat.format(date)); 
     String line1Text = "16 here now"; 
     String line2Text = "There"; 
     String line3Text = "Thisshire"; 
     String line4Text = "GU66 74S"; 
     String phoneText = "Phone: 010101 0101010"; 
     String mobileText = "Mobile: 010101 010101"; 
     String emailText = "Email: [email protected]"; 
     //to/for strings 
     String toString = "To: " + pupilName[pupCount-1]; 
     String forString = "For: " + parentsName[parCount-1]; 
     //footer strings 
     String footerLine1 = "Please pay by cash or cheque made payable to " + "      " + " or by Internet Banking."; 
     String footerBold1 = "Mrs Bob Bobbins"; 
     String iBankingDet = "company Sort code: " + "    " + " Account Number: " + "     " + "put your name as"; 
     String bSortCode = "00-00-00"; 
     String bAccountNumber = "0000000"; 
     String iBankingDet2 = "reference!"; 
     String noticeAlert = "Please Pay by latest on the first lesson of Term/Series."; 
     String customNotice = "** Thank you for your custom **"; 
     //Set fonts 
     Font textFont = new Font("Tahoma", Font.PLAIN, 10); 
     Font toForFont = new Font("Tahoma", Font.BOLD, 10); 
     Font addressFont = new Font("Tahoma", Font.PLAIN, 8); 
     Font titleFont = new Font("Tahoma", Font.BOLD, 24); 
     Font textFontBold = new Font("Tahoma", Font.BOLD, 10); 
     //set table titles 
     g2d.setPaint(Color.GRAY); 
     g2d.setFont(addressFont); 
     g2d.drawString(descrp, 15, 215); 
     g2d.drawString(sesh, 215, 215); 
     g2d.drawString(rate, 275, 215); 
     g2d.drawString(amount, 345, 215); 
     g2d.drawString(totalAmountString, 285, 495); 
     //set title 
     g2d.setFont(titleFont); 
     g2d.drawString(titleText, 250, 20); 
     //set address 

     g2d.setFont(addressFont); 
     g2d.drawString(line1Text, 350, 40); 
     g2d.drawString(line2Text, 350, 50); 
     g2d.drawString(line3Text, 350, 60); 
     g2d.drawString(line4Text, 350, 70); 
     g2d.drawString(phoneText, 350, 80); 
     g2d.drawString(mobileText, 350, 90); 
     g2d.drawString(emailText, 350, 100); 
     g2d.drawString(printDate, 350, 120); 
     //draw to and for strings 
     g2d.setPaint(Color.darkGray); 
     g2d.setFont(toForFont); 
     g2d.drawString(toString, 10, 160); 
     g2d.drawString(forString, 180, 160); 
     //draw footer onto page 
     g2d.setPaint(Color.black); 
     g2d.setFont(textFont); 
     g2d.drawString(footerLine1, 10, 520); 
     g2d.setFont(textFontBold); 
     g2d.drawString(footerBold1, 220, 520); 
     g2d.setFont(textFont); 
     g2d.drawString(iBankingDet, 10, 545); 
     g2d.setFont(textFontBold); 
     g2d.drawString(bSortCode, 165, 545); 
     g2d.drawString(bAccountNumber, 295, 545); 
     g2d.setFont(textFont); 
     g2d.drawString(iBankingDet2, 10, 555); 
     g2d.setFont(textFontBold); 
     g2d.drawString(noticeAlert, 95, 575); 
     g2d.drawString(customNotice, 145, 595); 
     //add image to invoice 
     Image img; 
     img = new ImageIcon(this.getClass().getResource("logo.png")).getImage(); 
     g2d.drawImage(img, -10, -10, 180, 84, null); 
     return (PAGE_EXISTS); 
    } 
} 

因此,基本上,所有我需要做的就是将其他参数传递到打印方法,但这是不可能的!它不会以其他方式实施印刷课程!

我试过用数组替代,还有更多,我想不出其他的东西!

回答

1

您不能向print()添加参数,因为它必须实现接口。

但是,您可以将任意数量的参数添加到构造函数中,并且这些参数可以在您的方法中使用。

bk.append(new IntroPage(arg1, arg2, arg3), PJ.defaultPage()); 
+0

如果我记得corectly你不能传递参数到一个类? :S – gunmania

+0

构造函数用于创建类的**实例**。一个构造函数需要参数,但是你是正确的,你不能将参数传递给一个类。 –

0

您可以将字段添加到类IntroPage。然后,当您创建IntroPage传递适当的参数来初始化您的文件。后来,在print()中,您可以使用您的档案中的数据。