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

时间:2021-10-23 16:41:25

I need some help with my code. What i need it to do is everytime a page is added to the Java Book different data needs to be on the page every time. I've tried it a number of different ways and i just can't work it out!

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

Here's my code:

这是我的代码:

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

So basically, all i need to do is pass additional parameters to the print method, but this is impossible! It wouldn't implement the print class other wise!

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

I've tried substituting arrays and a lot more, i can't think of anything else!

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

2 个解决方案

#1


1  

You can't add arguments to the print() as it must implement the interface.

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

However you can add any number of arguments to the constructor, and these can be used in your method.

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

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

#2


0  

You could add fields to the class IntroPage. Then when you create IntroPage pass appropriate arguments to initialize your fileds. And later, in print(), you can use the data from your fileds.

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

#1


1  

You can't add arguments to the print() as it must implement the interface.

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

However you can add any number of arguments to the constructor, and these can be used in your method.

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

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

#2


0  

You could add fields to the class IntroPage. Then when you create IntroPage pass appropriate arguments to initialize your fileds. And later, in print(), you can use the data from your fileds.

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