将参数传递给print方法(JAVA)

时间:2011-11-30 10:23:26

标签: java methods printing parameters

我的代码需要一些帮助。我需要做的是每次将页面添加到Java Book时,每次都需要在页面上显示不同的数据。我尝试了很多不同的方法,但我无法解决这个问题!

这是我的代码:

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: here@there.com";
        //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);
    }
}

所以基本上,我需要做的就是将其他参数传递给print方法,但这是不可能的!它不会以其他方式实现印刷类!

我尝试过替换数组等等,我想不出别的什么!

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

您可以向班级IntroPage添加字段。然后,当您创建IntroPage时,传递适当的参数来初始化您的文件。稍后,在print()中,您可以使用文件中的数据。