Java Canvas Zeichnen

Lies dir den Artikel durch den ich gepostet habe, dann weißt du warum man nicht repaint überschreiben sollte....

Einfachster Grund: In repaint bekommst du kein Graphics Objekt.
 
Ok habs verstanden warum nicht die repaint() - Funktion. Ich habe nur solange an meinem neuen Eintrag herum geschrieben das ich deinen Eintrag noch nicht gesehen habe weil ich es nicht zwischendurch aktualisierte.

Aber wie würdet ihr es denn machen BufferedImage in die Klasse mit hinein schreiben als Instanz oder wie? siehe einen Eintrag von mir vorher

Cu Nathaniell
 
Ich habe die Klasse PrintPreview jetzt umgeschrieben zu:

Java:
public class FormPrintPreview extends javax.swing.JFrame {
    
    private java.awt.Canvas canvas;
    private Vector<java.awt.image.BufferedImage> seiten;
    private int aktuelleseite;
    
    public FormPrintPreview(String TITLE) {
        this.setTitle(TITLE);
        this.setBounds(0, 0, 900, 900);
        this.setLayout(null);
        this.setVisible(true);
        this.setDefaultCloseOperation(this.DISPOSE_ON_CLOSE);
        
        // Hintergrund muss weiss werden        
        this.getContentPane().setBackground(new java.awt.Color(255,255,255));
        
        this.canvas = new java.awt.Canvas();
        this.canvas.setBounds(0, 0, 900, 900);
        this.canvas.setBackground(new java.awt.Color(255, 255, 255));
        this.canvas.setVisible(true);
        
        this.add(this.canvas);
        this.setComponentZOrder(this.canvas, 0);
        
        this.seiten = new Vector<java.awt.image.BufferedImage>();
        this.aktuelleseite = 0;
    }
    
    public java.awt.Canvas getCanvas() {
        return this.canvas;
    }
    
    public Vector<java.awt.image.BufferedImage> getSeitenVector() {
        return this.seiten;
    }
    
    public void addSeite(java.awt.image.BufferedImage SEITE) {
        if(this.seiten == null) {
            this.seiten = new Vector<java.awt.image.BufferedImage>();
            this.seiten.add(SEITE);
        }
        else {
            this.seiten.add(SEITE);
        }        
    }
}


und der Aufruf sieht so aus:

Java:
    FormPrintPreview t = new FormPrintPreview("Drucken Abfrage Bestellliste");
    java.awt.image.BufferedImage p = new java.awt.image.BufferedImage(800, 800, java.awt.image.BufferedImage.TYPE_INT_RGB);            
    Graphics2D g = p.createGraphics();
    g.drawString("Hallo ich bins der Test!", 50, 50);
    g.drawOval(90, 90, 100, 100);
    t.getCanvas().paintAll(g);


Aber das gezeichnete bild zeigt er mir immer noch nicht an
Es liegt wahrscheinlich daran das ich die paint() - Methode noch nicht überschrieben habe!! Aber womit überschreibe ich die paint() - Methode

Oder wo kann ich dazu eine Antwort finden die nicht 42 ist *grins*

Cu Nathaniell
 
Wenn du nicht weißt, wie man Methoden überschreibt solltest du dir vielleicht nochmal die Grundlagen von objectorientierter Programmierung anschauen.

Wenn du grundlegende Fragen hast, wirst du das meiste hier finden
http://www.galileocomputing.de/openbook/javainsel7/

Du überschreibst eine Methode, in dem du eine Klasse von einer anderen Klasse erben lässt und in der neuen Klasse eine Methode schreibst, die es in der Vater-Klasse schon gibt.

z.B.
Code:
public class XPanel extends JPanel{

   public void paint(Graphics g){
      super.paint(g);
      g.drawString("test", 10,10);
   }
}

MFG

Sascha
 
Ich bin jetzt soweit gekommen das ich das Bild auf dem JFrame erstellt bekomme aber, der Hintergrund ist Schwarz und die gezeichneten Linien sind weiss. Und ich bekomme es nicht hin das es umgedreht ist.

Java:
FormPrintPreview t = new FormPrintPreview("Drucken Abfrage Bestellliste FormPrintPreview");
            java.awt.image.BufferedImage p = new java.awt.image.BufferedImage(900, 900, java.awt.image.BufferedImage.TYPE_INT_RGB);          
            
            FormPreviewPrint s = new FormPreviewPrint();
            
            javax.swing.JFrame o = new javax.swing.JFrame();
            o.setTitle("Drucken Abfrage Bestellliste FormPreviewPrint");
            o.setBounds(100, 100, 900, 900);
            o.setLayout(null);
            o.setVisible(true);
            o.setDefaultCloseOperation(o.DISPOSE_ON_CLOSE);
            o.add(s);
            o.setComponentZOrder(s, 0);            
            
            Graphics2D g = p.createGraphics();
            g.setBackground(new java.awt.Color(255,255,255)); 
            System.out.println("g.Background = " + g.getBackground().toString());
            
            g.drawString("Hallo ich bins der Test!", 50, 50);
            g.drawOval(90, 90, 100, 100); 
            t.addSeite(p);
            s.addSeite(p);
            t.getSeitenVector().trimToSize();
            System.out.println("capacity = " + t.getSeitenVector().capacity());
            t.paint(g);            
            s.paint(g);

Java:
public class FormPreviewPrint extends java.awt.Canvas {
        //private java.awt.Canvas zeichenflaeche;
        //private javax.swing.JPanel panel;
        
        //private javax.swing.JButton ButtonDrucken;
        //private javax.swing.JButton ButtonAbbruch;
    
    private java.awt.Canvas canvas;
    private Vector<java.awt.image.BufferedImage> seiten;
    private int aktuelleseite;
    
    public FormPreviewPrint() {        
        this.setBounds(0, 0, 900, 900);        
        this.setVisible(true);
        
        super.setBackground(new java.awt.Color(255,255,255));
        
        this.seiten = new Vector<java.awt.image.BufferedImage>();
        this.aktuelleseite = 0;
    }
    
    public java.awt.Canvas getCanvas() {
        return this;
    }
    
    public Vector<java.awt.image.BufferedImage> getSeitenVector() {
        return this.seiten;
    }
    
    public void addSeite(java.awt.image.BufferedImage SEITE) {
        if(this.seiten == null) {
            this.seiten = new Vector<java.awt.image.BufferedImage>();
            this.seiten.add(SEITE);
        }
        else {
            this.seiten.add(SEITE);
        }        
    }
    
    public void paint(Graphics g) {
        //g = seiten.get(aktuelleseite).getGraphics();
        //this.setBackground(new java.awt.Color(255,255,255));
        g.drawImage(seiten.get(aktuelleseite), 0, 0, this);
    }
}


Java:
public class FormPrintPreview extends javax.swing.JFrame {
    
    private java.awt.Canvas canvas;
    private Vector<java.awt.image.BufferedImage> seiten;
    private int aktuelleseite;
    
    public FormPrintPreview(String TITLE) {
        this.setTitle(TITLE);
        this.setBounds(0, 0, 900, 900);
        this.setLayout(null);
        this.setVisible(true);
        this.setDefaultCloseOperation(this.DISPOSE_ON_CLOSE);
        
        // Hintergrund muss weiss werden
        //this.getZeichenFlaeche().getContentPane().setBackground(new java.awt.Color(255,255,255));
        this.getContentPane().setBackground(new java.awt.Color(255, 255, 255));
        
        //this.canvas = new java.awt.Canvas();
        //this.canvas.setBounds(0, 0, 900, 900);
        //this.canvas.setBackground(new java.awt.Color(255, 255, 255));
        //this.canvas.setVisible(true);
        
        //this.add(this.canvas);
        //this.setComponentZOrder(this.canvas, 0);        
        
        this.seiten = new Vector<java.awt.image.BufferedImage>();
        this.aktuelleseite = 0;
    }
    
    public java.awt.Canvas getCanvas() {
        return this.canvas;
    }
    
    public Vector<java.awt.image.BufferedImage> getSeitenVector() {
        return this.seiten;
    }
    
    public void addSeite(java.awt.image.BufferedImage SEITE) {
        if(this.seiten == null) {
            this.seiten = new Vector<java.awt.image.BufferedImage>();
            this.seiten.add(SEITE);
        }
        else {
            this.seiten.add(SEITE);
        }        
    }
    
    public void paint(Graphics g) {
        //g = seiten.get(aktuelleseite).getGraphics();
        super.getContentPane().setBackground(new java.awt.Color(255, 255, 255));
        g.drawImage(seiten.get(aktuelleseite), 0, 0, this);
    }
}

Ich gebe bald auf Weiss jemand den Grund warum das so geschieht? Oder kann mir eine Lösuung des Problems nennen


CU Nathaniell
 
@Matze:

Tut mir leid verstehe gerade nur Bahnhof

Bin wahrscheinlich schon Geistigkaputt für heute.

Kannst du es mir bitte mal genauer erklären!?

CU Nathaniell
 
Ich will doch nur ein JFrame Zeichnen auf dem ein Canvas liegt. Auf das Canvas möchte ich zeichnen und genau immer die aktuelle Seite davon. Wie schon gelöst über den Vector.

Aber ich raffs nich warum das nicht geht!!

Bitte Hilfe


Cu Nathaniell
 
Na du willst doch nun dein BufferedImage darstellen oder?

Java:
g.drawImage(image,0,0,this);
 
Zurück