Problem beim Image zeichnen via andere Klasse

bluerob

Mitglied
Hallo Com,

ich habe ein Problem beim zeichnen eines Images.

Ich benutze ein JPanel zum zeichnen und überschreibe dabei die paintComponent-Methode.
Alles was ich in dieser Klasse zeichnen lasse funktioniert wunderbar, über das von der Methode mitgelieferte Graphics Objekt (im Java-Code g.drawLine()).

Wenn ich jetzt allerdings über eine andere Klasse die Methode draw() aufrufe, um ein Image zeichnen zu lassen, malt er leider nichts.

Da ich in meiner anderen Klasse kein Graphics Objekt habe, dachte ich mir, dass ich einfach das Graphics Objekt der paintComponent-Methode einem GraphicsObjekt der Klasse zuordne (this.g=g).
Meine draw-Methode benutzt dann das GraphicsObjekt der Klasse.
Um den Fehler einzugrenzen habe ich diese draw-Methode abgeändert.
Das "hier" wird ausgegeben, allerdings das in der Methode selbst erzeugte Image nicht gezeichnet.
Das bedeutet doch eigentlich, dass es an dem Graphics Objekt liegen muss oder?
Allerdings fehlt mir das Wissen, um diesen Fehler zu verstehen.

Deswegen die Frage an euch. Was kann ich tun, damit die Bilder gezeichnet werden?

Danke für jede Hilfe! 🙂

Java:
Graphics g;

@Override
    public void paintComponent (Graphics g){
        super.paintComponent(g);
        this.g=g;

        g.drawLine(...);
   }

public void draw(Image img, int x, int  y){
        System.out.println("hier");
        ImageIcon i = new ImageIcon("AktiveSoldiers.png");
        g.drawImage(i.getImage(), 100, 100, null);
    }
 
Java:
this.g=g;
Sowas sollte man nicht machen! Das ist in etwa genauso schlimm wie getGraphics() 😉

Das Graphics Objekt dass der paintComponent() übergeben wird ist nur solange "gültig" wie der Zeichenvorgang dauert. Wenn du ein Image zeichnen willst dann kannst du das in etwa so machen:


Java:
DeineKlasse deineKlasse = ...;

@Override
public void paintComponent (Graphics g){
   super.paintComponent(g);

   deineKlasse.drawImage(g);
}

Die drawImage Methode kann das das Graphics Objekt nutzen und das Bild damit zeichnen.
 
Aber ich möchte ja von einer anderen Klasse das Zeichnen aufrufen lassen.

Also ich habe die Klasse Animation, in welcher die Bilder für eine Animation verwaltet werden.
Da ich in dieser Klasse kein Graphics Objekt habe, dachte ich mir ich übergebe das Bild und die Koordinaten an meine Paint Klasse und diese zeichnet das Bild dann.
Dies wollte ich über die draw-Methode in meiner Paint-Klasse machen, welche meine Animation-Klasse aufruft.

Wie kann ich das machen?
 
Wenn ich dich richtig verstehe, dann schreib dir in deiner Panel-Klasse eine Methode, die das Image entgegennimmt, einer Membervariablen zuweist und dann repaint() aufruft.

In der painComponent() zeichnest du dann einfach die Membervariable

Gruß Vanny
 
Meinst du mit Membervariable eine Variable die dann mit if geprüft wird?

Java:
private Image image;

public void draw(Image img){
   this.image=image;
   repaint();
}

@Override
public void paintComponent(Graphics g){
   super.paintComponent(g);

   if(image!=null) g.drawImage(image,x,y,null);
}

so?
 
@TO:
Fakt ist erstmal dass du nur innerhalb der paintComponent() Methode zeichnen kannst, sonst nirgends.
Das heißt du musst innerhalb der paintComponent() eine Methode deiner Animation Klasse aufrufen die dann das entsprechende Bild zeichnet.
Ein neuzeichnen kannst du mit repaint() triggern.
 
Danke, damit läuft es.
Ich muss aber als Membervariable eine ArrayList erstellen, damit mehrere Animationen gleichzeitig laufen können. Hier hakt es noch ein wenig, aber denke die Probleme kann ich selbst lösen 🙂

Danke nochmal! 🙂
 

Neue Themen


Zurück
Oben