Java Canvas Zeichnen

Also ich weiß nicht was du bei dir gemacht hast, aber das kann man nicht so lassen.
Erstmal hat der Vector nichts im Canvas zu suchen, da das Canvas zur Darstellung sein soll. Das heißt, man gibt dem Canvas immer das Image, dass es darstellen soll.

Dann legst du nicht mal ein Canvas-Object in deinem Frame an.

Ich verstehe dann noch nicht warum du die paint()-Methode des Frames überschrieben hast.
Die Klasse die dann das Frame und das Canvas nutzt, ist mir auch unverständlich. Die paint-Methode brauchst du nie aufzurufen.

Ich hab die hier mal schnell ein kleines Beispiel geschrieben, dass genau das macht, was du möchtest.

Java:
import java.awt.Graphics;
import java.awt.image.BufferedImage;

public class FormPreviewPrint
    extends java.awt.Canvas
{

  private BufferedImage printImage = null;


  public FormPreviewPrint()
  {
    this(null);
  }
  
  public FormPreviewPrint(BufferedImage printImage)
  {
    super();
    this.printImage = printImage;
  }

  /**
   * @return the printImage
   */
  public BufferedImage getPrintImage()
  {
    return printImage;
  }

  /**
   * @param printImage the printImage to set
   */
  public void setPrintImage(BufferedImage printImage)
  {
    this.printImage = printImage;
  }
  
  public void paint(Graphics g)
  {
    if(printImage != null)
      g.drawImage(printImage, 0, 0, this);
  }
}

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;

public class PreviewFrame
    extends JFrame
{

  private FormPreviewPrint previewPrint = null;

  public PreviewFrame()
  {
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    setSize(300, 300);

    previewPrint = new FormPreviewPrint();

    add(previewPrint, BorderLayout.CENTER);

    previewPrint.setPrintImage(createPrintImage());
  }

  private BufferedImage createPrintImage()
  {
    BufferedImage p = new BufferedImage(900, 900, BufferedImage.TYPE_INT_RGB);
    Graphics2D g = p.createGraphics();
    g.setColor(Color.white);
    g.fillRect(0, 0, getWidth(), getHeight());
    
    g.setColor(Color.BLACK);
    g.drawString("Hallo ich bins der Test!", 50, 50);
    g.drawOval(90, 90, 100, 100);
    
    return p;
  }

  public static void main(String[] args)
  {
    new PreviewFrame().setVisible(true);
  }

}


MFG

Sascha
 
Zuletzt bearbeitet von einem Moderator:
@Sascha
Danke nochmals das ist eine gute Idee.

Ich leg jetzt noch ne Klasse an die die Druckvorschau an sich kapselt.
Mit Canvas, dem Frame und der zusatzklasse die den Vector enthält.

Das ist ein guter Ansatz da kann ich dann auch den Vector mit meiner eigenen Klasse als grundlage nehmen lassen um so die Bilder zu kapseln einem DruckDocument das das Interface Printable implentiert.

Vielleicht habt ihr aber eine bessere Idee dann immer her damit. Ich habe außerdem dem mit dem Druck von Graphics Objekten oder BufferedImages nooch ein paar Probleme.

Falls ich sie nicht lösen kann dann melde ich mich nochmal. Danke Danke Danke

Habe eine ähnliche Lösung wie du gefunden Sascha aber bei weitem nicht so elegant.

Cu Nathaniell
 
Zurück