paint() und JButton's ?

Sladda

Mitglied
Hallo.

Ich habe ein JFrame, darauf JButtons mit jeweils IconImages.
Die werden wunderbar angezeigt.

Wenn ich jetzt aber den Hintergrund des JFrames mit einem Hintergrundbild (jpg) versehen will, das mache ich mit public void paint (Graphics g){
g.drawImage(backgroundImage,0,0,this);
}
dann sehe ich plötzlich nur noch das hintergrundbild, aber nicht mehr die buttons. gehe ich dann mit der maus über die stelle wo die buttons sein sollten, erscheinen die buttons plötzlich wieder... es soll aber alles gleichzeitig zu sehen sein....

was mach ich falsch ?

Vielen Dank für Eure Mühe
mfg
Sladda
 
Hallo,

nachdem du dein zeug gezeichnet hast muss auch noch der rest gezeichnet werden.

Java:
void paint (Graphics g)
{
    // zeichne dein Hintergrundbild
    g.drawImage(backgroundImage,0,0,this);
    // zeichne den Rest 
    super.paint(g);
}

müsste eigentlich so klappen.

Grüße
R.
 
Zuletzt bearbeitet von einem Moderator:
Guten Morgen!

Ich habe eine Lösung für dich - allerdings möchte ich auch, dass du verstehst, warum deine Vorgehensweise (und die von Ritchie_Fomm) nicht funktioniert ;)
Es würde mit einem Frame funktionieren - aber eine Frame ist nun mal kein JFrame. Das eine ist AWT, das andere Swing.
Das ganze Problem besteht darin, dass du von den ganzen Containern (GlassPane, LayeredPane,ContentPane,MenuBar), aus denen so ein JFrame besteht, eigentlich nur den Hintergrund des ContentPane ändern möchtest.
Das kannst du machen, indem du z.B. eine neue Klasse erzeugst, die von Container (bzw. JComponent) erbt. In dieser überschreibst du dann die paint() - Methode. Anschließend setzt du dann diese Komponente als ContentPane in deinem JFrame, und setzt einen LayoutManager. Das war's;)
Hier ein kleines Beispiel:
Code:
import javax.swing.*;
import java.awt.*;


public class EinFenster extends JFrame
{
	
	Image backgroundimage;
	
	public static void main(String args[])
	{
		new EinFenster();
	}
	
	public EinFenster()
	{
		setSize(300,200);		
		
		try
		{			
			backgroundimage = getToolkit().getImage("1.jpg");		
			MediaTracker mt = new MediaTracker(this);
			mt.addImage(backgroundimage, 0);
			mt.waitForAll();
		}
		catch(InterruptedException e)
		{
			System.out.println(e);
		}
	
		Container c = new Container()
		{
			public void paint(Graphics g)
			{						
				g.drawImage(backgroundimage,0,0,this);				
				super.paint(g);
			}			
		};
		c.setLayout(null);
		this.setContentPane(c);		
		JButton b = new JButton("Hallo Wörld");
		b.setBounds(50,30,130,30);
		this.getContentPane().add(b);
		
		
		setVisible(true);
	}
	
}

mfg,
Muddin
 
es funktioniert super, vielen Dank !

Kannst du vielleicht noch etwas zu dem MediaTracker sagen, damit ich auch verstehe warum diese Vorgehensweise funktioniert ;-)

auf jeden Fall erstmal super vielen Dank!
Grüße
 
Hi!

Der MediaTracker dient dazu, medien zu überwachen - im Speziellen Bilder. Ein Bild muss ja nicht unbedingt auf der Festplatte bzw. auf dem Lokalen PC liegen., sondern auf einem anderen entfernten Rechner. Wenn das Bild über das Internet geladen werden soll, dann dauert das natürlich ein wenig.
Der MediaTracker sorgt dafür, dass mit der Programmausführung gewartet wird, bis alle Bilder vollständig geladen wurden.

mfg,
Muddin
 
Hallo :)

Ich habe nach langem Suchen nun endlich diesen Thread entdeckt. Die Verzweiflung hat endlich ein Ende *g* Ich hab das ganze nun etwas umgewandelt um es als Applet laufen zu lassen und es funktioniert einwandfrei :) Vielen Dank für die tolle Erklärung :)
 
Zurück