【问题标题】:Passing Parameters to the print method (JAVA)将参数传递给打印方法(JAVA)
【发布时间】:2011-11-30 10:23:25
【问题描述】:

我的代码需要一些帮助。我需要它做的是每次将页面添加到 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 方法,但这是不可能的!它不会以其他方式实现打印类!

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

【问题讨论】:

    标签: java methods printing parameters


    【解决方案1】:

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

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

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

    【讨论】:

    • 如果我没记错的话,你不能将参数传递给一个类? :S
    • 构造函数用于创建类的实例。构造函数接受参数,但你是对的,你不能将参数传递给类。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-10-04
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      相关资源
      最近更新 更多