java-forum.org - Java programmieren aus Leidenschaft
Java 6 Einstieg und professioneller Einsatz
Alter Preis: 34,90 EUR
Jetzt: 0,00 EUR

zzgl. Versandkosten

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Java Basics - Anfänger-Themen

Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern

Thema geschlossen    
Themen-Optionen Thema durchsuchen Ansicht
Alt 04.07.2009, 17:25   #1 (permalink)
Neuer Benutzer
Bit
 
Registriert seit: 04.07.2009
Fachbeiträge: 6
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard Bild aus paint() Methode auslagern

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.

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

Geändert von Sonique (05.07.2009 um 13:45 Uhr)
Sonique ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 04.07.2009, 19:27   #2 (permalink)
Java-Forum Team
Moderator
 
Registriert seit: 06.01.2007
Fachbeiträge: 16.771
Abgegebene Danke: 0
Erhielt 1.642 Danke für 1.487 Beiträge
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!
Marco13 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 04.07.2009, 20:07   #3 (permalink)
Premium-Benutzer
 
Benutzerbild von André Uhres
 
Registriert seit: 10.05.2005
Fachbeiträge: 8.203
Blog-Einträge: 16
Abgegebene Danke: 33
Erhielt 287 Danke für 265 Beiträge
Related reading: Malen in Swing Teil 1: der grundlegende Mechanismus
__________________
Angenehm, gesund und entspannend:
Barfußlaufen
Einfach probieren: lauf barfuß!
André Uhres ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 05.07.2009, 12:03   #4 (permalink)
Neuer Benutzer
Bit
Themenstarter
 
Registriert seit: 04.07.2009
Fachbeiträge: 6
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
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 Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
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
Sonique ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 05.07.2009, 12:38   #5 (permalink)
Java-Forum Team
Moderator
 
Registriert seit: 06.01.2007
Fachbeiträge: 16.771
Abgegebene Danke: 0
Erhielt 1.642 Danke für 1.487 Beiträge
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...
Marco13 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 05.07.2009, 12:43   #6 (permalink)
Premium-Benutzer
 
Benutzerbild von André Uhres
 
Registriert seit: 10.05.2005
Fachbeiträge: 8.203
Blog-Einträge: 16
Abgegebene Danke: 33
Erhielt 287 Danke für 265 Beiträge
Zitat: Sonique
Beitrag anzeigen
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.
__________________
Angenehm, gesund und entspannend:
Barfußlaufen
Einfach probieren: lauf barfuß!
André Uhres ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 05.07.2009, 13:40   #7 (permalink)
Neuer Benutzer
Bit
Themenstarter
 
Registriert seit: 04.07.2009
Fachbeiträge: 6
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Ok hier ist das KSKB:

Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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..
Sonique ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 05.07.2009, 15:23   #8 (permalink)
Java-Forum Team
Moderator
 
Registriert seit: 06.01.2007
Fachbeiträge: 16.771
Abgegebene Danke: 0
Erhielt 1.642 Danke für 1.487 Beiträge
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);
  }



}
Marco13 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 05.07.2009, 16:14   #9 (permalink)
Neuer Benutzer
Bit
Themenstarter
 
Registriert seit: 04.07.2009
Fachbeiträge: 6
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
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?
Sonique ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 05.07.2009, 18:22   #10 (permalink)
Java-Forum Team
Moderator
 
Registriert seit: 06.01.2007
Fachbeiträge: 16.771
Abgegebene Danke: 0
Erhielt 1.642 Danke für 1.487 Beiträge
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)
Marco13 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 05.07.2009, 19:21   #11 (permalink)
Neuer Benutzer
Bit
Themenstarter
 
Registriert seit: 04.07.2009
Fachbeiträge: 6
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
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)
Sonique ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 05.07.2009, 22:11   #12 (permalink)
Java-Forum Team
Moderator
 
Registriert seit: 06.01.2007
Fachbeiträge: 16.771
Abgegebene Danke: 0
Erhielt 1.642 Danke für 1.487 Beiträge
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);
        }

    }



}
Marco13 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 06.07.2009, 02:55   #13 (permalink)
Premium-Benutzer
 
Benutzerbild von André Uhres
 
Registriert seit: 10.05.2005
Fachbeiträge: 8.203
Blog-Einträge: 16
Abgegebene Danke: 33
Erhielt 287 Danke für 265 Beiträge
Zitat: Sonique
Beitrag 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..
"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...
__________________
Angenehm, gesund und entspannend:
Barfußlaufen
Einfach probieren: lauf barfuß!
André Uhres ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 06.07.2009, 16:56   #14 (permalink)
Neuer Benutzer
Bit
Themenstarter
 
Registriert seit: 04.07.2009
Fachbeiträge: 6
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Super Sache Funktioniert perfekt

Hab da noch ne letzte kleine Verständnisfrage
wieso braucht man
Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
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
Sonique ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 06.07.2009, 17:12   #15 (permalink)
Stammbenutzer
Halbes Gigabyte
 
Registriert seit: 06.02.2006
Fachbeiträge: 6.266
Abgegebene Danke: 0
Erhielt 6 Danke für 6 Beiträge
Damit die überschriebene Methode von paint(Graphics g) aufgerufen
wird die noch zusätzliche Funktionen ausführt.
__________________
http://www.weltgebetsuhr.de/Signatur.gif
Leroy42 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Thema geschlossen    

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
paint methode wiederholen BigmasterDenis AWT, Swing, JavaFX & SWT 6 22.04.2006 12:33
Paint Methode löscht alles Java Basics - Anfänger-Themen 4 05.09.2005 15:00
java.lang.NullPointerException in der Paint Methode Manfred AWT, Swing, JavaFX & SWT 1 04.09.2004 16:47
paint Methode bummerland AWT, Swing, JavaFX & SWT 2 01.11.2003 11:04


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:27 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de