49272

Passing Parameters to the print method (JAVA)

Question:

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!

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 *

* * @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!

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

Answer1:

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

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

Answer2:

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.

Recommend

  • How to Apply transformation to Polygon object in Java
  • Put JLabel in front of Graphics 2D Rectangle in JPanel
  • Libgdx Camera - Setting position having no effect
  • Lines aren't drawing exactly where I clicked?
  • Is there a method that generates a timer in a JFrame?
  • Use a timer when a key is pressed
  • Can you add a mouse listener to an object in paintComponent
  • TinyXML - any way to skip problematic DOCTYPE tag?
  • Can someone explain how Postgresql roles, Postgresql users and Linux users relate to each other?
  • Painting Graphics2D in a JFrame
  • Problem with sockets and OutOfMemory error
  • draw9patch just hangs on Mac 10.7.5
  • Android SAXParser, parse into array and get child nodes
  • Difference between File>Close and :close in Vim
  • How can i create a big file in google drive with google app script?
  • How to add header and Footer to each activity in android
  • jQuery & CSS - Cut text by height, no truncate
  • Is storing an OAuth token in cookies bad practise?
  • How can I encode a filename according to RFC 2231?
  • Underlying type for Tuple in Swift
  • Accessing Windows Azure Queues from client side javascript/jquery
  • d3.js: why is d3.geo.path() giving NaN?
  • JSON - slashes not escaping
  • Google Maps api v3 get start and end coordinates of a street
  • Request response issues in biztalk
  • uml Composition relationships to RDF and OWL
  • D3 get axis values on zoom event
  • Change multiple background-images with jQuery
  • Algorithm for a smudge tool?
  • Can Jackson SerializationFeature be overridden per field or class?
  • AT Commands to Send SMS not working in Windows 8.1
  • Comma separated Values
  • Android Studio and gradle
  • Rails 2: use form_for to build a form covering multiple objects of the same class
  • Error creating VM instance in Google Compute Engine
  • Hits per day in Google Big Query
  • how does django model after text[] in postgresql [duplicate]
  • How do I configure my settings file to work with unit tests?
  • Is it possible to post an object from jquery to bottle.py?
  • git trying to push non-existent file … after clearing cache