Bild aus paint() Methode auslagern

Status
Nicht offen für weitere Antworten.

Sonique

Mitglied
Hallo allerseits :),
hab da folgendes Problem:
Ich hab 2 Klassen und will nun das Bild aus MyClass in MyOtherClass auslagern

public class MyClass {

public void paint(Graphics g) {
// das will ich auslagern
g.drawImage(x,y,this);
}
}



public class MyOtherClass {

public void myMethod() {
Graphics g = irgendwas-was-ein-Graphics-Objekt-zurückgibt();
MyClass myCl = new MyClass();
myCl.paint(g);
}
}

Das Auslagern funktioniert jedoch nicht. Ändere ich jedoch g.drawImage in zB g.fillOval
funktioniert das Ganze. ???:L

Ich vermute es liegt am ImageObserver this. Wie muss ich vorgehen das das Bild in der anderen Klasse angezeigt wird?
Ich bedank mich schonmal für jede Antwort die ich bekom
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Als ImageObserver kann man i.a. einfach "null" übergeben. Das Bild sollte ohnehin komplett geladen sein.

Das hier
Code:
Graphics g = irgendwas-was-ein-Graphics-Objekt-zurückgibt();
sieht aber ganz, ganz heikel aus: Dieses "irgendwas" könnte ein BufferedImage sein, aber wenn das KEIN BufferedImage ist, dann machst du da mit an Sicherheit grenzender Wahrscheinlichkeit etwas falsch!
 

Sonique

Mitglied
Hey danke für die schnellen Antworten.
Also ich hab es jetzt mal mit nem BufferedImage versucht aber i.was mach ich immer noch falsch. Hab versucht das Bild wie folgt auszulagern:
Java:
public class MyClass {
	  
    Label dObserver   = new Label();

	
	
    Image figR         = Toolkit.getDefaultToolkit().getImage("DigR.gif");
    int width             = figR.getWidth(dObserver);
    int height            = figR.getHeight(dObserver);
    
    	
       BufferedImage bImage  = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    
          
  public void figRechts(){
	        
	  bImage.getGraphics().drawImage(figR, 0, 0, dObserver);

        
  }


Java:
public class MyOtherClass {

public void keyPressed(KeyEvent e) {

if ((int)e.getKeyCode()==68){

              mons.figRechts(); //Objekt mons ist erzeugt
               
               
          }

}
}

Oder ist das Ganze schon beim Ansatz falsch???
Danke für eure Hilfe :)
 

Marco13

Top Contributor
:autsch: Da jetzt einfach irgendwo ein BufferedImage einzubauen, damit man getGraphics aufrufen kann, war nicht Sinn der Sache .... Poste am besten ein KSKB, mit allen Klassen in einem Codeblock...
 

André Uhres

Top Contributor
aber i.was mach ich immer noch falsch.
Ziemlich unbequem als Aussage. Was geht denn nicht? Könntest du eventuell, wie Marco13 vorschlägt, ein kurzes, selbständiges und kompilierbares Beispiel machen? Vom Ansatz her ist es nicht unbedingt vekehrt, zuerst auf ein Image zu malen. Das Image muss aber dann auch auf die Graphics der Komponente übertragen werden (paintComponent überschreiben), damit es sichtbar werden kann. Mir scheint allerdings, daß der Umweg über BufferImage in deinem Fall überflüssig ist.
 

Sonique

Mitglied
Ok hier ist das KSKB:

Java:
import java.applet.*;
import java.awt.event.*;

//Klasse 1
public class KSKB extends Applet implements KeyListener {

        KSKB2 mons;

      
        public void init()
        {
               addKeyListener(this);
       
         }
                                       
        public void keyPressed(KeyEvent e){
          

          if ((int)e.getKeyCode()==68){

               mons.figRechts();
               repaint();
               
          }
          
        }
        
        public void keyReleased(KeyEvent e){}
        public void keyTyped(KeyEvent e){}

}

//Klasse 2
import java.awt.*;
import java.awt.image.BufferedImage;

public class KSKB2 extends KSKB{
	//Position der Figur
	private int x_pos=500;
	private int y_pos=500;
	
	Label dObserver   = new Label();

	
	//Images initialisieren
    Image figR         = Toolkit.getDefaultToolkit().getImage("DigR.gif");
    int width             = figR.getWidth(dObserver);
    int height            = figR.getHeight(dObserver);
    
   
    BufferedImage bImage  = new BufferedImage(50, 50, BufferedImage.TYPE_INT_RGB);
    
    
    
    

    
  public KSKB2 (){
	    
  }
  

    
  public void figRechts(){
	        
	  bImage.getGraphics().drawImage(figR, x_pos,y_pos, dObserver);

  }
 
    
}

Das Programm sollte eigentlich auf Tastendruck von "D" ein Bild anzeigen.
Die Sache mit dem paintComponent hab ich nicht so richtig verstanden, bin aber gerade am einlesen. Als Anfänger fehlen mir da noch ein paar Grundlagen bezüglich Panel und Label usw..
 

Marco13

Top Contributor
Ja, Grundlagen fehlen da noch, aber darauf gab es ja schon den Hinweis. Was genau das Programm machen soll... eigentlich dachte ich, dass "D" das Bild bewegen sollte... aber... ach, hier ist mal ein bißchen Code.

Übrigens wäre es besser, ein JApplet statt eines Applets zu verwenden.

Code:
// Von http://www.java-forum.org/java-basics-anfaenger-themen/85322-bild-aus-paint-methode-auslagern.html#post533892
import java.applet.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.image.BufferedImage;



public class KSKB extends Applet implements KeyListener
{
    //Position der Figur
    private int x_pos=50;
    private int y_pos=50;

    //Images initialisieren
    Image figR;
    int width;
    int height;



  public KSKB ()
  {
  }

        public void init()
        {
               addKeyListener(this);

         }

        public void keyPressed(KeyEvent e){

          if ((int)e.getKeyCode()==68){

               figRechts();

          }

        }

        public void keyReleased(KeyEvent e){}
        public void keyTyped(KeyEvent e){}

  public void start()
  {
        MediaTracker tracker = new MediaTracker(this);
        figR = getImage(getDocumentBase(), "image.jpg");
        tracker.addImage(figR, 0);
        try
        {
            tracker.waitForAll();
        }
        catch (InterruptedException e)
        {
            return;
        }
        width = figR.getWidth(null);
        height = figR.getHeight(null);
  }


  public void figRechts()
  {
      x_pos+=5;
      repaint();
  }

  public void paint(Graphics g)
  {
      super.paint(g);
      g.drawImage(figR, x_pos, y_pos, null);
  }



}
 

Sonique

Mitglied
Ich glaub ich bin zu doof dafür :( i.wie funktioniert es nicht. Also es zeigt kein Bild an (den Image Pfad hab ich natürlich angepasst). Mal ne blöde Frage aber für was braucht man super in der paint Methode, ist doch alles (in deinem Codebeispiel) in der gleichen Klasse oder?
 

Marco13

Top Contributor
Hm - wenn du das jetzt genau so startest, sollte er eigentlich das Bild anzeigen!? Und das tut er nicht?!
(Um das aufteilen in 2 Klassen kann man sich kümmern sobald er das Bild zumindest in einer anzeigt)
 

Sonique

Mitglied
Ahh es funktioniert doch :) Prima aber wie muss ich das mit dem Auslagern jetzt machen? Einfach die Methode in der anderen Klasse aufrufen funktioniert nicht (ist bestimmt auch der falsche Weg) ???:L
 

Marco13

Top Contributor
Hier nochmal ein Schnipsel - sowas wollte ich schon ewig mal in den "Codeschnipseln" posten, weil's eh immer wieder gefragt wurde ... hab auch schon angefangen, aber ... naja... vielleicht hilft's als grober ansatz...
Code:
// Von http://www.java-forum.org/java-basics-anfaenger-themen/85322-bild-aus-paint-methode-auslagern.html#post533892
import java.applet.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.image.BufferedImage;

class Figur
{
    private Image image;
    private int x;
    private int y;

    public Figur(Image image, int x, int y)
    {
        this.image = image;
        this.x = x;
        this.y = y;
    }

    public void setX(int x)
    {
        this.x = x;
    }
    public void setY(int y)
    {
        this.y = y;
    }

    public int getX()
    {
        return x;
    }

    public int getY()
    {
        return y;
    }

    public void paintOn(Graphics g)
    {
        g.drawImage(image, x, y, null);
    }
}


public class KSKB extends Applet implements KeyListener
{
    private Figur figur;

    public KSKB ()
    {
    }

    public void init()
    {
        addKeyListener(this);
    }

    public void keyPressed(KeyEvent e)
    {
        if ((int)e.getKeyCode()==68)
        {
            figRechts();
        }
    }

    public void keyReleased(KeyEvent e){}
    public void keyTyped(KeyEvent e){}

    public void start()
    {
        MediaTracker tracker = new MediaTracker(this);
        Image image = getImage(getDocumentBase(), "276.jpg");
        tracker.addImage(image, 0);
        try
        {
            tracker.waitForAll();
        }
        catch (InterruptedException e)
        {
            return;
        }
        figur = new Figur(image, 10, 10);
    }


    public void figRechts()
    {
        figur.setX(figur.getX()+5);
        repaint();
    }

    public void paint(Graphics g)
    {
        super.paint(g);
        if (figur != null)
        {
            figur.paintOn(g);
        }

    }



}
 

André Uhres

Top Contributor
Die Sache mit dem paintComponent hab ich nicht so richtig verstanden, bin aber gerade am einlesen. Als Anfänger fehlen mir da noch ein paar Grundlagen bezüglich Panel und Label usw..
"paintComponent" ist nur für Swing Komponenten. Diese haben immer ein J vorgesetzt (JPanel, JLabel). In einem Swing JApplet können wir einfach ein "PicturePanel" hinzufügen, das von JPanel erbt und dann "paintComponent" überschreibt. Wenn Malcode aus paintComponent ausgelagert wird, muss man wissen, daß der externe Code nur von paintComponent genutzt werden sollte, weil nur sie über das Graphics Objekt der Komponente verfügt. Mehr...
 

Sonique

Mitglied
Super Sache Funktioniert perfekt

Hab da noch ne letzte kleine Verständnisfrage
wieso braucht man
Java:
public void paint(Graphics g)
    {
        super.paint(g);
        if (figur != null)
        {
            figur.paintOn(g);
        }

    }
in dieser Methode super.paint(g); ?

Vielen Dank euch beiden das ihr euch Zeit genommen habt :)
 

Leroy42

Top Contributor
Damit die überschriebene Methode von paint(Graphics g) aufgerufen
wird die noch zusätzliche Funktionen ausführt.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Scrollbar - Bild - paint-Methode - zoom Java Basics - Anfänger-Themen 10
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
I Kamera anschließen / Bild machen / Live View / Externe Blitz Java Basics - Anfänger-Themen 19
I Innerhalb einem Bild ein Teil austauschen Java Basics - Anfänger-Themen 26
I Datei (Bild) Drucken und wie Druckeinstellung speichern? Java Basics - Anfänger-Themen 3
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
H Artefact mit Bild erzeugen Java Basics - Anfänger-Themen 11
R UML-Bild (Erkennung ob static o. nicht) Java Basics - Anfänger-Themen 18
J Bild auf Hintergrundbild zeichnen Java Basics - Anfänger-Themen 5
krgewb Bild itextpdf Java Basics - Anfänger-Themen 2
C Bild in executable JAR File mitgeben Java Basics - Anfänger-Themen 5
VPChief Bild in JEditorPane Java Basics - Anfänger-Themen 9
B Warum bekomme ich kein Bild. Java Basics - Anfänger-Themen 10
S Bild einfügen // NEU Java Basics - Anfänger-Themen 12
N Bild drehen Java Basics - Anfänger-Themen 3
S Ein Bild mit dynamischer Quelle neuzeichnen Java Basics - Anfänger-Themen 12
N GLOOP Bild nicht ansichtbar Java Basics - Anfänger-Themen 5
M Bild in JFrame Java Basics - Anfänger-Themen 1
B Signatur erstellen - Bild ist nur weiß Java Basics - Anfänger-Themen 0
CptK Interface Bild rotieren Java Basics - Anfänger-Themen 17
CptK Interface Bild rotieren Java Basics - Anfänger-Themen 1
Anica Processing Animation Bild-Position ändern Java Basics - Anfänger-Themen 9
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
CptK Interface Curser durch Bild ersetzen & MouseListner Java Basics - Anfänger-Themen 2
M jTextPane Bild anzeigen Java Basics - Anfänger-Themen 6
CptK Bild beim betätigen eines JButtons Java Basics - Anfänger-Themen 6
S Bild über JButton legen Java Basics - Anfänger-Themen 3
B Bild mit Schrift befüllen / Anpassung bei Wortlänge Java Basics - Anfänger-Themen 2
D Google maps bild mit marker versehen Java Basics - Anfänger-Themen 12
D ImageView mit einfarbigem Bild fuellen Java Basics - Anfänger-Themen 3
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
M Einzelne Pixel in einem Bild auslesen und bearbeiten Java Basics - Anfänger-Themen 1
M Bild wird von JFrame nicht geladen Java Basics - Anfänger-Themen 12
J Bild in Button einsetzen Java Basics - Anfänger-Themen 6
S button kommt durch bild Java Basics - Anfänger-Themen 13
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
B Greenscreen (grüner Hintergrund ersetzen mit Bild) Java Basics - Anfänger-Themen 49
K Interface Kein Bild im .jar-File Java Basics - Anfänger-Themen 15
S Bild in Jar-File mit ImageIO Java Basics - Anfänger-Themen 50
S Bild einfügen Java Basics - Anfänger-Themen 16
binop Bild anzeigen lassen Java Basics - Anfänger-Themen 2
D Bild zu Text Java Basics - Anfänger-Themen 4
I HTML Code in Bild (transparent) konvertieren Java Basics - Anfänger-Themen 0
I Watermark erstellen mit HTML in Bild? Java Basics - Anfänger-Themen 7
D Classpath Bild kann in .jar nicht geladen werden Java Basics - Anfänger-Themen 2
Anfänger2011 Bild programmieren?! Java Basics - Anfänger-Themen 3
8 Eigenes Bild in email einfügen Java Basics - Anfänger-Themen 1
K JTable Bild einfügen Java Basics - Anfänger-Themen 1
L BufferdImage schwarzes Bild nach zusammenfügen zweier Bilder Java Basics - Anfänger-Themen 8
S Bild in JOptionPane Java Basics - Anfänger-Themen 1
C Abfrage nach einem Bild im Array Java Basics - Anfänger-Themen 9
J Umgebungsvariable Programmfenster zeigt kein Bild an Java Basics - Anfänger-Themen 1
J Bild loopen Java Basics - Anfänger-Themen 6
M JFrame Bild einfügen Java Basics - Anfänger-Themen 3
S Bild bei Kontakt ändern Java Basics - Anfänger-Themen 2
C Erste Schritte Bild holen und speichern Java Basics - Anfänger-Themen 1
D Bild in Frame einfügen Java Basics - Anfänger-Themen 11
D Bild im Applet anzeigen Java Basics - Anfänger-Themen 3
F Bild in ein Runnable Jar File packen (eclipse) Java Basics - Anfänger-Themen 2
M Java-Applet: Bild einbinden (getImage) Java Basics - Anfänger-Themen 0
J Ganzes Bild Java Basics - Anfänger-Themen 4
T GUI anstatt Bild schwarzes Rechteck gespeichert Java Basics - Anfänger-Themen 0
A Bild verschwindet! Wieso?? Java Basics - Anfänger-Themen 2
I Bild aus Bereich laden Java Basics - Anfänger-Themen 3
P Bild in JFrame Titelleiste Java Basics - Anfänger-Themen 7
Y Nach Bild-Upload wird Bild nicht angezeigt Java Basics - Anfänger-Themen 1
M Button mit Bild und Text Java Basics - Anfänger-Themen 2
M JSP-Einfaches Bild anzeigen Java Basics - Anfänger-Themen 4
C Bild ins Frame laden und Objekte drüber legen Java Basics - Anfänger-Themen 1
Sogomn Bild will sich nicht skalieren lassen Java Basics - Anfänger-Themen 1
P Ein Bild für GUI (Java-Editor) Java Basics - Anfänger-Themen 4
D Bild für ein paar Sekunden einblenden und wieder ausblenden Java Basics - Anfänger-Themen 1
E Bild per Verzeichnis/JFileChooser auf JPanel laden Java Basics - Anfänger-Themen 13
S Bild auf eine Position rotieren?! Java Basics - Anfänger-Themen 4
P Bild bearbeiten Java Basics - Anfänger-Themen 9
Z Datenmatrix in Bild verwandeln Java Basics - Anfänger-Themen 4
C Bild verschwinden lassen Java Basics - Anfänger-Themen 7
S Bild Icon aus ID3Tag auslesen Java Basics - Anfänger-Themen 4
E Bild vom FileChooser aus via ImageIcon in DB schreiben Java Basics - Anfänger-Themen 16
D Bild zum Panel hinzufügen Java Basics - Anfänger-Themen 8
C Greenfoot: Bei Tastendruck und best. Wert Bild ändern Java Basics - Anfänger-Themen 2
O Auflösung einer Bild-Datei bekommen ohne sie herunterzuladen?? Java Basics - Anfänger-Themen 7
L Bild-Datein "zuschneiden" Java Basics - Anfänger-Themen 11
O DeviantArt-Bild Konverter: Fehler.. Java Basics - Anfänger-Themen 16
K Transparents Bild laden -> Fehlermeldung Java Basics - Anfänger-Themen 6
M Bild einbinden Java Basics - Anfänger-Themen 7
2 Bild auf JApplet zeichnen Java Basics - Anfänger-Themen 18
T Bild laden Java Basics - Anfänger-Themen 7
R Bild in GUI Java Basics - Anfänger-Themen 11
D Eclipse Juno zeigt Bild nicht bei Run Java Basics - Anfänger-Themen 3
Kenan89 Bild mit jar öffnen Java Basics - Anfänger-Themen 4
S Problem bei Bewegung von einem Bild! Java Basics - Anfänger-Themen 2
J Bild mit transparenter Farbe Java Basics - Anfänger-Themen 10
N Erste Schritte Applet zeichnet Bild nicht Java Basics - Anfänger-Themen 10
J Bild auf JLabel wird nicht angezeigt Java Basics - Anfänger-Themen 11
J Bild einfügen Java Basics - Anfänger-Themen 3
T ASCII Art von Bild erstellen. Java Basics - Anfänger-Themen 32

Ähnliche Java Themen

Neue Themen


Oben