Toon posts:

[Java] Printen meerdere componenten

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb het volgende stukje code waarmee ik een enkel component kan printen. Nu wil ik het zo hebben dat ik een willekeurig aantal componenten kan printen en dan slechts een keer het printDialog te zien krijg. Wat moet ik doen? Een Book aanmaken of iets dergelijks?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import java.awt.*;
import javax.swing.*;
import java.awt.print.*;

public class PrintUtilities implements Printable {
  private Component componentToBePrinted;

  public static void printComponent(Component c) {
    new PrintUtilities(c).print();
  }

  public PrintUtilities(Component componentToBePrinted) {
    this.componentToBePrinted = componentToBePrinted;
  }

  public void print() {
    PrinterJob printJob = PrinterJob.getPrinterJob();
    printJob.setPrintable(this);
    if (printJob.printDialog())
    try {
      printJob.print();
    } catch(PrinterException pe) {
      System.out.println("Error printing: " + pe);
    }
  }

  public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
    if (pageIndex > 0) {
    return(NO_SUCH_PAGE);
    } else {
    Graphics2D g2d = (Graphics2D)g;
    g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
    g2d.scale(0.5, 0.5); // schalen van component
    disableDoubleBuffering(componentToBePrinted);
    componentToBePrinted.paint(g2d);
    enableDoubleBuffering(componentToBePrinted);
    return(PAGE_EXISTS);
    }
  }

public static void disableDoubleBuffering(Component c) {
    RepaintManager currentManager = RepaintManager.currentManager(c);
    currentManager.setDoubleBufferingEnabled(false);
  }

public static void enableDoubleBuffering(Component c) {
    RepaintManager currentManager = RepaintManager.currentManager(c);
    currentManager.setDoubleBufferingEnabled(true);
  }
}

Even voor de duidelijkheid: Ik vraag niet om een implementatie maar om een manier van aanpak. Implementatie mag natuurlijk wel :9

  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 22:27
Je moet de paint(...) methode aanpassen. Als je bijv 1 component per pagina wil, moet je aangeven dat je de if() aanpast zodat ie pas bij bijv. 3 componenten na 3 pagina's aangeeft NO_SUCH_PAGE. Vervolgens zet je alle componenten in een array en pas je componentsToBePrinted in een array versie.
Succes!

Verwijderd

Topicstarter
't Is gelukt, thanx. En ik begrijp ook nog waarom! :P |:(

Verwijderd

Topicstarter
Nog een vraag: Hoe kan ik een aantal Vectoren (bestaande uit Strings) het beste afdrukken? Moet ook goed worden gewrapt.

  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 22:27
Het beste kun je ze in een StringTokenizer doen en dan laten splitten op spaties. Vervolgens kun je met FontMetrics uitzoeken wat de lengte is van een stukje, als dat nog past plak je het er achter en ander zet je het op een nieuwe regel. Mocht een woord nou zo lang zijn dat het opzich al niet eens op 1 regel past, dan hak je het gewoon in kleinere stukken.

btw, wel toevallig dat we allebei nu met hetzelfde bezig zijn! :D

Verwijderd

Topicstarter
Ik zal proberen er iets van te maken. In ieder geval bedankt. Ik had verwacht dat het implementeren van printen me toch iets makkelijker af zou gaan. Ik denk dat ik toch iets te weinig Java ervaring heb, of er iets te lang niets mee heb gedaan. :)
Pagina: 1