Bild an vorgegebene stelle im Fenster stzen

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Ich habe einen JFrame und möchte darin ein Bild an der Stelle (100,100) platzieren.

Code:
addImage(){
                img = Toolkit.getDefaultToolkit().getImage("test.gif");
		if ( img != null ){
		      repaint();
  }
}

public void paint( Graphics g ){
	    if ( img != null )   {
	      g.drawImage( img, 100, 100, f );  //f ist das JFrame
	      setSize( img.getWidth(this), img.getHeight(this) );
	    }
}
Wenn ich das so habe funktioniert es leider nicht, er zeigt nichts an. Das Bild liegt im korrektem Pfad.

Kann mir bitte jemand helfen, Danke!!

Grüße aus Berlin
 
ganzer Code würde helfen, zu welchem Objekt gehört z.B. das paint(), anscheinend nicht zum JFrame f,
wird dieses Objekt überhaupt angezeigt, hat es eine size > 0,0

dann die Frage, ob das Bild test.gif vorhanden ist, und an der richtigen Stelle so dass es gefunden wird,
auch wenn keine Datei da ist, wird ein img-Objekt erstellt..

folgendes klappt bei mir, besser aber aus offiziellen Tutorials abschreiben:
Code:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.JFrame;

public class TestGUI extends JFrame {

	Image img;

	public TestGUI() {
		setSize(500, 500);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		addImage();
	}

	void addImage() {
		img = Toolkit.getDefaultToolkit().getImage("test.gif");
		if (img != null) {
			repaint();
		}
	}

	public void paint(Graphics g) {
		g.fillRect(0, 0, 800, 800);
		if (img != null) {
			g.drawImage(img, 100, 100, this);
			setSize(img.getWidth(this), img.getHeight(this));
		}
	}

	public static void main(String[] args) {
		new TestGUI();
	}
}
 
Danke erstmal.
Also wenn ich deinen Code rüber kopiere in eine extra Klasse funktionert alles super. Das Bild wird angezeigt.
Aber wenn ich es in mein Projekt integrieren möchte geht es nicht mehr. Ich habe da jetzt mal noch so ein paar Debug-Ausgaben hinzugefügt und siehe da die paint()-Methode wird nicht aufgerufen.

zu welchem Objekt gehört z.B. das paint(), anscheinend nicht zum JFrame f,
wie weise ich JFrame f denn paint() zu ?

Danke!
 
wie weise ich JFrame f denn paint() zu ?

Code:
public class MyFrame extends JFrame{

  public void paintComponent(Graphics g) {

     //Jetzt hast die paintComponent Methode von JFrame überschrieben
     //und die gehört jetzt zu deinem Frame
  }

}
 
so hab ichs gemacht (mir war nicht ganz klar das jedes JFrame ne paintComponent Methode hat) aber wie gesagt sie wird komischerweise nicht aufgerufen!
Warum bloß?
 
wird das fenster überhaupt angezeigt?
also machst du setVisible(true); ?

Edit:mir fehlt grad nen kopf gegen wand smilie -.-
hast du das fenster nach dem öffnen mal bewegt? bzw minimiert und dann maximiert?
dann sollte es kommen...

bzw setz gleich das setVisible erst nachdem du das images erstellt hast....
 
SebiB90 hat gesagt.:
wird das fenster überhaupt angezeigt?
also machst du setVisible(true); ?

Edit:mir fehlt grad nen kopf gegen wand smilie -.-
hast du das fenster nach dem öffnen mal bewegt? bzw minimiert und dann maximiert?
dann sollte es kommen...

bzw setz gleich das setVisible erst nachdem du das images erstellt hast....

Ja setVisible mach ich nachdem das Bild gezeichnet wwerden sollte. Jetzt hab ichs auch mal bewegt und verkleinert/vergrößert hilft aber alles nichts. :roll:
 
SebiB90 hat gesagt.:
benutz mal paintComponent anstatt paint
JFrame ist swing, nicht awt^^
Das ist falsch. Ein JFrame erbt von der AWT-Klasse Frame und hat keine paintComponent-Methode, da JFrame nicht von JComponent erbt. Bei JFrame wird daher nur paint() aufgerufen.
@Gast: Ich würde dazu raten, eine Subklasse von JPanel zu erstellen und darin dann in paintComponent() das Bild zu zeichnen (das JPanel dann natürlich dem JFrame adden).
 
JPKI hat gesagt.:
SebiB90 hat gesagt.:
benutz mal paintComponent anstatt paint
JFrame ist swing, nicht awt^^
Das ist falsch. Ein JFrame erbt von der AWT-Klasse Frame und hat keine paintComponent-Methode, da JFrame nicht von JComponent erbt. Bei JFrame wird daher nur paint() aufgerufen.
@Gast: Ich würde dazu raten, eine Subklasse von JPanel zu erstellen und darin dann in paintComponent() das Bild zu zeichnen (das JPanel dann natürlich dem JFrame adden).
😵
das ist mir ganz neu....
 
Ich versteh es nicht, es will einfach nicht erscheinen. Ich hab jetzt nen extra JPanel angelegt:
Code:
Image img;
public void paint( Graphics g ){
		System.out.println("paint()");
	    if ( img != null )
	    {
	      g.drawImage( img, 0, 0, panelImage );
	      setSize( 100, 100 );
	    }
}

public void open(){
		img = Toolkit.getDefaultToolkit().getImage("test.gif");
		if ( img != null ){
			System.out.println("image not null");
		      repaint();
		  }
}

public void add(){
                ...
                panelImage = new JPanel();
		panelImage.setLayout(null);
		panelImage.setLocation(50,700);
		panelImage.setSize(100,100);
		f.add(panelImage);
		open();
                ...
}
Es geht weder mit paint noch mit paintComponent.

Die ganzen Methoden sind in einer Klasse. Der Konstruktor dieser Klasse wird von einer anderen Klasse zur Laufzeit aufgerufen.
 
Die Fensterklasse mit der main-Methode:
Code:
public class Test extends JFrame {

  public Test() {

   super("Bildbetrachter");
   getContentPane().setLayout(new BorderLayout());
   getContentPane().add(new PicturePanel("test.gif"),BorderLayout.CENTER);
   setSize(500,500);
   setVisible(true);
 }

  public static void main(String args[]) {

   new Test();
 }
}
Die JPanel-Subklasse:
Code:
public class PicturePanel extends JPanel {

  private Image img;

  public PicturePanel(String filename) {

   super();
   img = Toolkit.getDefaultToolkit().getImage(filename);
   repaint();
 }

  public void paintComponent(Graphics g) {

   super.paintComponent(g);
   g.drawImage(img,100,100,this);
 }
}

So müsst's klappen (Code ungetestet).
 
@JPKI:
Habs jetzt so bzw. ähnlich probiert, wie du.
Hier mein kompletter Code:
Code:
public class JustTest extends JPanel {

			JPanel panelImage;
		     Image img;
		     Test v;
		     public JustTest(Test pr) {
		        v = pr;
		        open();
		     }

		     public void paintComponent( Graphics g ){
		 		System.out.println("paint()");
		 	    if ( img != null )
		 	    {
		 	      g.drawImage( img, 50, 700, this );
		 	      setSize( 100, 100 );
		 	    }
		 	  }
		 	public void open(){
		 		
		 		panelImage = new JPanel();
				panelImage.setLayout(null);
				panelImage.setLocation(50,700);
				panelImage.setSize(100,100);
				v.f.add(panelImage);
				
		 		
		 		img = Toolkit.getDefaultToolkit().getImage("fussball.gif");
		 		if ( img != null ){
		 			System.out.println("image not null");
		 		      repaint();
		 		  }
		 		System.out.println("after");
		 	}
}
Code:
public class Test extends JFrame implements Constants {

	/**
	 * @param args
	 */
	
	static JFrame f;
	public static void main(String[] args) {
//		new Updater(VERSION);
		//View v = new View();
		//new Sql();
		
		f = new JFrame();
		f.setTitle("title");
		f.setSize(800, 500);
		f.setResizable(false);
//		f.addWindowListener(c);
		f.setLayout(null);
		f.setIconImage(f.getToolkit().getImage("fussball.gif"));
		f.setLocation(200, 200);
		f.setVisible(true);
		new JustTest(new Test());
		
	}

}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben