2016-08-09 49 views
0

Ich versuche eine Anwendung zu erstellen, die Daten in Spalten druckt. Mein Problem ist, dass die job.setPrintable läuft mehrmals ... Das bedeutet, dass das Dokument totaly falsch wird ...Etiketten drucken Java, Loops (?)

Hat jemand ein paar Ideen dazu?

Vielleicht haben Sie einige andere Ideen, wie ich diesen Code besser machen kann (?) ...

Danke erweitern in

ich zum Beispiel habe 10 Indizes in meiner Arraylist .. . Wenn ich die Anwendung ausführen, wird es 20 Spalten in meinem Dokument erstellen ... 10 von ihnen total leer ist und sie nur Platz wegnehmen ...

private final int PAGE_WIDTH = Math.round(MediaSize.ISO.A4.getX(MediaSize.MM)); 
private final int PAGE_HEIGHT = Math.round(MediaSize.ISO.A4.getY(MediaSize.MM)/8); 
private PrinterJob job = PrinterJob.getPrinterJob(); 
private Graphics2D column; 
private Font font = new Font("Serif", Font.BOLD, 9); 

private int writeOnRow = 0; 
private int pageRow = 0; 
private int columnSpace = 4; 
private int itemsInRow = 3; 
private int itemCurrentRow = 0; 

public Printer(final ArrayList<Customers> resultAsList) { 
    resultAsList.remove(0); 

    job.setPrintable(new Printable() { 
     public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException { 
      if (pageIndex > 0) { 
       return NO_SUCH_PAGE; 
      } 

      column = (Graphics2D)g; 
      column.translate(pf.getImageableX(), pf.getImageableY()); 

      column.setFont(font); 

      for (Customers c : resultAsList) { 
       String line = 
         c.getName() + "\n" + 
           c.getAddress() + "\n" + 
           c.getPostcode() + " " + c.getCity(); 

       //DATA, COLUMN, ROW 
       column.drawString(c.getName(), columnSpace, writeOnRow += column.getFontMetrics().getHeight() + 2); 
       column.drawString(c.getAddress(), columnSpace, writeOnRow += column.getFontMetrics().getHeight() + 2); 
       column.drawString(c.getPostcode() + " " + c.getCity(), columnSpace, writeOnRow += column.getFontMetrics().getHeight() + 2); 


       if (itemCurrentRow == itemsInRow) { 
        pageRow += PAGE_HEIGHT; 
        itemCurrentRow = 0; 
        columnSpace = 4; 
        itemCurrentRow++; 
       } else { 
        writeOnRow = pageRow; 
        columnSpace += PAGE_WIDTH; 
        itemCurrentRow++; 
       } 

       writeOnRow += pageRow; 
       laps++; 

      } 
      return PAGE_EXISTS; 
     } 
    }); 

    boolean doPrint = job.printDialog(); 

    if (doPrint) { 
     try { 
      job.print(); 
     } catch (PrinterException ex) { 
      System.out.println(ex); 
     } 
    } 
} 
+0

'// Nichts zu sehen hier tatsächlich, wenn Sie eine Ausnahme vor sich haben ** Sie ** sehen müssen, es nicht zu ignorieren! – Frakcool

Antwort

2

Ihr Code nicht cl aussehen ean. Früher oder später wird es sehr schwer zu pflegen sein - eigentlich ist es schon so.

  • Es ist cool, dass Sie alle diese ganzzahligen Werte als Felder verwendet haben, aber es wäre besser, wenn Sie es Konstanten machen heißt private static final Felder aus.
  • Vermeiden Sie das Erstellen von Methoden, die bis zu 3 Argumente benötigen. Es ist ein Zeichen, dass es in kleinere Stücke wie Methoden, Klassen usw. unterteilt werden könnte.
  • Vermeiden Sie die Verwendung magische Zahlen wie columnSpace = 4;. Was ist das 4? Überlegen Sie, ob Sie es zu einem konstanten Feld machen wollen.
  • Sie nicht schlucken Ausnahmen wie Sie getan haben. Es macht keinen Sinn. Entweder Sie behandeln sie oder erklären throws.

Es scheint, dass Ihre Schleife möglicherweise ungültig ist. Um Ihren Code hübscher zu machen, empfehle ich Ihnen, Clean Code zu lesen. Es wird die Dinge viel klarer machen.