![]() |
|
|
|||||||
| Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern |
|
|
|
Themen-Optionen | Thema durchsuchen | Ansicht |
| #1 (permalink) | |
|
Neuer Benutzer
Bit
Registriert seit: 04.07.2009
Fachbeiträge: 6
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
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) |
|
|
| #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(); |
|
|
| #3 (permalink) | |
|
Premium-Benutzer
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
|
|
|
| #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:
Oder ist das Ganze schon beim Ansatz falsch??? Danke für eure Hilfe
|
||||
|
|
| #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...
|
|
|
| #6 (permalink) | |
|
Premium-Benutzer
Registriert seit: 10.05.2005
Fachbeiträge: 8.203
Blog-Einträge: 16
Abgegebene Danke: 33
Erhielt 287 Danke für 265 Beiträge
|
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.
|
|
|
| #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:
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.. |
||
|
|
| #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);
}
}
|
|
|
| #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?
|
|
|
| #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) |
|
|
| #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)
|
|
|
| #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);
}
}
}
|
|
|
| #13 (permalink) | |||||||||||||||||||
|
Premium-Benutzer
Registriert seit: 10.05.2005
Fachbeiträge: 8.203
Blog-Einträge: 16
Abgegebene Danke: 33
Erhielt 287 Danke für 265 Beiträge
|
|
||||||||||||||||||
|
|
|||||||||||||||||||
| #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
Vielen Dank euch beiden das ihr euch Zeit genommen habt
|
||
|
|
|
| Themen-Optionen | Thema durchsuchen |
| 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 |
|
|