probs mit einbinden von bildern

Status
Nicht offen für weitere Antworten.

MScalli

Bekanntes Mitglied
hi leutz
hab da ein prob mit dem einbinden von nem banner
ich weiss das es da massig threads gibt, aber ich such schon ewig und hab schon alles mögliche ausprobiert aber es will nicht..
ich hab mein prog auf das wesentliche reduziert..
ist ein lauffähiges programm.. nur das bild(banner.jpg) muss noch in den ordner gepackt werden
das prob ist folgendes!! immer wenn ich mit nem fenster über dem bild bin verschwindet es an der stelle..
und es dauernd neu zu zeichnen.. das kanns net sein!!
mit paintComponent statt paint soll es gehen.. aber ich kann zwar die methode so nennen.. sie aber dann nicht aufrufen?!?!?

kann sich das bitte bitte wer anschaun!!!!

Code:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Image;
import javax.swing.tree.*;
import javax.swing.event.*;
import java.awt.image.BufferedImage; 
import javax.imageio.ImageIO; 

public class Teste extends JFrame
{

	JPanel jp_kopf;
	Container cp;
	BufferedImage banner;

	public Teste(String title)
	{
    	// Frame-Initialisierung
		super(title);

		setSize(1000, 900);

		// Container für alle Komponenten
		cp = getContentPane();
		cp.setLayout(null);

		// Kopf --> Banner
		try
		{
			banner=ImageIO.read(new File("./pics/Banner.jpg"));
		}
		catch(Exception e)
		{
			System.out.println("Fehler Banner");
		} 
		
		jp_kopf = new JPanel();
		jp_kopf.setLayout(null);
		jp_kopf.setBounds(0, 23, 1000, 95);
		jp_kopf.setVisible(true);
		jp_kopf.setBackground(new Color(111,111,111));
		cp.add(jp_kopf);
	
    	setResizable(false);
    	setVisible(true);
    	
	}

	public static void main(String[] args) throws IOException
	{
		new Teste("Teste");
	}

public void paint(Graphics g)
{
/**
 * Paint Methode Für das Bild im Banner und für dessen Beschriftung
 */
	super.paint(g);
	g.drawImage(banner, 0, 45, cp);
} 

}//****************ENDE PROGRAMM******************

wie gesagt.. ist eigentlich viel viel grösser.. also wundert euch net über die includes 😉
danke schon mal an alle!!
 
Es ist empfehlenswert, das Bild in ein geeignetes JPanel zu packen, und DAS dann zeichnen zu lassen. (D.h. nicht die paint-Methode des JFrames zu überschreiben.) Wenn dort NUR das Bild sein soll, kannst du stattdessen auch ein ImageIcon nehmen (jp_kopf wäre dann ein ImageIcon mit dem Banner)
 
ich habs mal mit imageicon probiert..
geht aber auch nicht!!

Code:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Image;
import javax.swing.tree.*;
import javax.swing.event.*;
import java.awt.image.BufferedImage; 
import javax.imageio.ImageIO; 
import java.awt.Graphics.*;

public class Teste extends JFrame
{
	ImageIcon img;

	JPanel jp_kopf;
	Container cp;
	BufferedImage banner;

	public Teste(String title)
	{
    	// Frame-Initialisierung
		super(title);

		setSize(1000, 900);

		// Container für alle Komponenten
		cp = getContentPane();
		cp.setLayout(null);

		img = new ImageIcon("Banner.jpg"); 
		BufferedImage banner = new BufferedImage(1000, 100, BufferedImage.TYPE_INT_ARGB); 

		jp_kopf = new JPanel();
		jp_kopf.setLayout(null);
		jp_kopf.setBounds(0, 23, 1000, 95);
		jp_kopf.setVisible(true);
		jp_kopf.setBackground(new Color(111,111,111));
		cp.add(jp_kopf);
	
    	setResizable(false);
    	setVisible(true);
    	
	}

	public static void main(String[] args) throws IOException
	{
		new Teste("Teste");
	}

public void paint(Graphics g)
{
/**
 * Paint Methode Für das Bild im Banner und für dessen Beschriftung
 */
	super.paint(g);
	g.drawImage(img.getImage(), 0,45,img.getImageObserver()); 
} 

}//****************ENDE PROGRAMM******************

weiss nicht genau wie das meinst mit dem "selbszeichnenden JPanel"?!?!
ein Beispiel wär super..
danke dir schon mal!!
 
wie denn nun?
"./pics/Banner.jpg"
oder
"Banner.jpg"


mache auch jeden Fall mal
System.out.println("Datei da?: "+new File(filename).exists());

> weiss nicht genau wie das meinst mit dem "selbszeichnenden JPanel"?!?!

du hast doch schon eine Subklasse von JFrame mit überschriebenen paint(),
dann kannst du doch auch eine Subklasse von JPanel schreiben?
 
sry. hab es eigentlich in dem ordner pics..
hab das bild aber raus um es einfacher zu machen!!

das bild ist schon da.. verschwindet halt immer wieder..
also ist exists() = true

habe es aber trotzdem mal eingegeben.. und war true!!!
 
habe das bild jetzt auf ein JLabel gelegt und das geht soweit!!
NUR.. so wie es aussieht ist das Bild rechtsbündig oder zentriert!! kann man das ändern, weil mein banner von links nach rechts aufgebaut ist?
also wenn was abgeschnitten wird(kommt oft vor weil der Banner 1300 pixel breit ist) dann soll es von rechts abgeschnitten werden!!

hier mal der quelltext wie ich es bis jetzt habe

Code:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Image;
import javax.swing.tree.*;
import javax.swing.event.*;
import java.awt.image.BufferedImage; 
import javax.imageio.ImageIO; 
import java.awt.Graphics.*;

public class Teste extends JFrame
{
	JLabel jl;
	Container cp;
	
	public Teste(String title)
	{
    	// Frame-Initialisierung
		super(title);

		setSize(1280, 900);

		// Container für alle Komponenten
		cp = getContentPane();
		cp.setLayout(null);
		
		jl = new JLabel(new ImageIcon("Banner.jpg"));
		jl.setBounds(0,30,1280,95);
		jl.setVisible(true);
		jl.setBackground(new Color(22,22,22));
		cp.add(jl);
		
    	setResizable(false);
    	setVisible(true);	
	}

	public static void main(String[] args) throws IOException
	{
		new Teste("Teste");
	}
}//****************ENDE PROGRAMM******************
 
Jo, mit einem "selbstzeichnenen JPanel" geht das :wink: Also mit einem JPanel, wo man paintComponent überschreibt, und dann eben das Bild so mal, wie man es will...
Code:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Image;
import javax.swing.tree.*;
import javax.swing.event.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.awt.Graphics.*;

class ImagePanel extends JPanel
{
	private BufferedImage image;
	public ImagePanel(String fileName)
	{
		try
		{
			image = ImageIO.read(new File(fileName));
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}

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

		// Links oben in die Ecke malen
		g.drawImage(image, 0, 0, this);

		// So groß malen, dass immer der ganze Banner ausgefüllt ist
		//g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
	}
}


public class Teste extends JFrame
{
   Component jl;
   Container cp;

   public Teste(String title)
   {
       // Frame-Initialisierung
      super(title);

      setSize(1280, 900);

      // Container für alle Komponenten
      cp = getContentPane();
      cp.setLayout(null);

      jl = new ImagePanel("bildB.jpg"); //new JLabel(new ImageIcon("bildB.jpg"));
      jl.setBounds(0,30,1280,95);
      jl.setVisible(true);
      jl.setBackground(new Color(22,22,22));
      cp.add(jl);

       //setResizable(false);
       setVisible(true);
   }

   public static void main(String[] args) throws IOException
   {
      new Teste("Teste");
   }
}//****************ENDE PROGRAMM******************
 
wow..

aussehen tuts schon mal super..
ich kann es leider erst am we testen.. voll im stress.
geb dir bescheid ob es klappt..
hab nämlich schon massig versucht und nichts hat irgendwie gefunzt..
deswegen die sache mit dem label 😉

vielen dank erst mal für die unterstützung @ all!!!!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben