paintComponent + Printable Interface?

Romsl

Erfahrenes Mitglied
Hi,

ist es möglich eine Klasse zu schreiben die von JPanel abgeleitet ist und die paintComponent überschreibt und zusätzlich das Interface Printable implementiert?

Das soll folgenden Zweck erfüllen.

In dem Panel sollen per paintComponent mit g.drawString Daten aus einer Datenbank gezeichnet werden. Anrede, Vorname, Nachname, usw.
Dann sollte das gleiche nochmal in der print Methode von Printable implementiert sein.
Grund hierfür: Ich habe ein JPanel in dem ich verschiedene Daten, durch adden einzelner JPanel zu diesem, aus einer Datenbank zusammentrage. Danach habe ich nun ein "Reservierungs" Panel das Anschrift Daten, Logo, Kunden Adress Daten und Reservierungs Daten enthält. -> Graphisch dargestellt.
Nun möchte ich genau dieses auch ausdrucken. Nur ist das Drucken kein Problem, sondern eher die Auflösung, d.h die Schrift wird pixelig gedruckt. Wenn ich nun die Auflösung des PrintJob höher setze wird mein Ausdruck verkleinert.

Gibts denn irgendwie eine Möglichkeit diese Elemente darzustellen und mit hoher Auflösung zu drucken, ohne ihre Tatsächliche Größe zu verlieren?

Bsp, JPanel mit Anschrift Daten:

Code:
public class DAPSAddressPanel extends JPanel {

  protected String pensionName = "Name der Pension";
  protected String pensionStreet = "Straße";
  protected String pensionCountry = "D";
  protected String pensionZip = "PLZ";
  protected String pensionTown = "Ort";
  protected String pensionWeb = "Web Adresse";
  protected String pensionMail = "E-Mail Adresse";

  public DAPSAddressPanel() {}

  public void paintComponent(Graphics g) {

    int positionY = 14;
    int stretchY = 18;

    //Set address font
    g.setFont(new Font("SansSerif", Font.PLAIN, 14));

    g.drawString(pensionName, 0, positionY);
    positionY += stretchY;

    g.drawString(pensionStreet, 0, positionY);
    positionY += stretchY;

    g.drawString(pensionCountry + "-" + pensionZip + " " + pensionTown, 0, positionY);
    positionY += stretchY;

    g.drawString(pensionWeb, 0, positionY);
    positionY += stretchY;

    g.drawString(pensionMail, 0, positionY);
  }

Druckanweisung des paperPanel mit den Daten Panels:

Code:
public void printer_actionPerformed(ActionEvent e) {

    //PrinterJob printerJob = PrinterJob.getPrinterJob();
    //PageFormat pageFormat = printerJob.defaultPage();

    Toolkit tk = Toolkit.getDefaultToolkit();
    //PrintJob pj = tk.getPrintJob(this.daps, "Drucken", null);
    //PrintJob pj = tk.getPrintJob(this.daps, "Drucken", null, PageAttributes.PrintQualityType.HIGH);

    PageAttributes pageAttributes = new PageAttributes(PageAttributes.ColorType.MONOCHROME, PageAttributes.MediaType.A4,
                                           PageAttributes.OrientationRequestedType.PORTRAIT,
                                           PageAttributes.OriginType.PHYSICAL,
                                           PageAttributes.PrintQualityType.NORMAL, new int[] {72, 72, 4});

    PrintJob printJob = tk.getPrintJob(this.daps, "Drucken", null, pageAttributes);

    if (printJob != null) {
      for (int i = 0; i < this.paperPanelList.size(); i++) {

        Graphics g = printJob.getGraphics();

        System.out.println(printJob.getPageResolution());

        ((JPanel)this.paperPanelList.get(i)).paintAll(g);

        g.dispose();

      }
      printJob.end();
    }
}

Bin dankbar für jede Hilfe

Edit: Noch eine zusätzliche Frage. Wird die print Methode aus dem Interface Printable auch hierarchisch aufgerufen? So wie die überschriebene paint oder paintComponent Methode?

Romsl
 
Zuletzt bearbeitet:
Zurück