Hintergrundbild eines JFrame ändern/aktualisieren

Pasukaru

Grünschnabel
Aaaalsooo.. hier mein Problem:
Ich habe ein JFrame (Haupfenster), darin befindet sich ein Button (btBildAendern) und ein "ImagePanel". Das ImagePanel ist ein JFrame, das ich irgendwo hier aus dem Forum hab, um ein Hintergrundbild einzufügen.
Das Bild wird auch einwandfrei angezeigt. So, und nun zu der Stelle, an der ich nicht weiter weiß...

Wenn ich jetzt auf den Button "Bild ändern" klicke, soll anstelle von Bild1.gif ein anderes Bild angezeigt werden (Bild2.gif). Hab jetzt leider keinen blassen Schimmer was ich wo ändern/hinzufügen muss, damit das zweite Bild angezeigt wird. Bin ziemlich am verzweifeln, da ich mit meinem Latein am Ende bin.

Ich hoffe ihr könnt mir helfen. :)

Danke im Voraus für eure Bemühungen.

MfG
Pasukaru

Hauptfenster:
Code:
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import java.awt.Rectangle;
import javax.swing.JButton;

public class Hauptfenster extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JPanel jPanelBild = null;
	private JButton btBildAendern = null;
	public Hauptfenster() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(467, 322);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getJPanelBild(), null);
			jContentPane.add(getBtBildAendern(), null);
		}
		return jContentPane;
	}

	/**
	 * This method initializes jPanelBild	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanelBild() {
		if (jPanelBild == null) {
			jPanelBild = new ImagePanel("bin/Bild1.gif");
			jPanelBild.setLayout(new GridBagLayout());
			jPanelBild.setBounds(new Rectangle(249, 46, 154, 190));
		}
		return jPanelBild;
	}

	/**
	 * This method initializes btBildAendern	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtBildAendern() {
		if (btBildAendern == null) {
			btBildAendern = new JButton();
			btBildAendern.setBounds(new Rectangle(95, 121, 119, 42));
			btBildAendern.setText("Bild ändern");
		}
		return btBildAendern;
	}

}

ImagePanel:
Code:
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;

/**
 * Mit Hilfe diesen Panels ist es möglich, ein Image anzuzeigen.
 */
 
public class ImagePanel extends javax.swing.JPanel {
	private static final long serialVersionUID = -4680452408782904433L;
	private String pfadOfImage = null;
	private Image image = null;  //  @jve:decl-index=0:
/**
 * ImagePanel Construktor. Es wird der Pfad des Bildes benötigt.
 */
public ImagePanel(String imagePfad) {
	super();
	pfadOfImage = imagePfad;

	image = new ImageIcon(pfadOfImage).getImage();
}
public int getImageHeight() {;
	return image.getHeight(null);
}
public int getImageWidth() {
	return image.getWidth(null); 
}
/**
 * Zeichnet das Image
 */

public void paintComponent(Graphics g) {
	super.paintComponent(g);
	g.drawImage(
		image, 
		new Double(g.getClipBounds().getCenterX() - (image.getWidth(this) / 2))
			.intValue(), 
		new Double(g.getClipBounds().getCenterY() - (image.getHeight(this) / 2))
			.intValue(), 
		this); 
}
}
 
Eigentlich nicht so schwer. Füg mal folgendes in die ImagePanel-Klasse hinzu:
Java:
public void setImage(String imgPath) {
	image = new ImageIcon(imgPath).getImage();
}

So, und nun zu deinem Button. Du musst da nur noch einen ActionListener einfügen und dann sollte die Methode so aussehen:
Java:
/**
	 * This method initializes btBildAendern	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtBildAendern() {
		if (btBildAendern == null) {
			btBildAendern = new JButton();
			btBildAendern.setBounds(new Rectangle(95, 121, 119, 42));
			btBildAendern.setText("Bild ändern");
			btBildAendern.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					getJPanelBild().setImage("PfadZumNeuenBild");
					getJPanelBild().repaint();
				}
			});
		}
		return btBildAendern;
	}
 
Danke für die schnelle Antwort. :)

Hab jetzt die Methode in mein ImagePanel eingefügt. Nach sowas hatte ich gesucht. :)
Wenn ich jetzt in der ActionPerformed meines Buttons die Methode aufrufen will, wird mir allerdings angezeigt, dass es diese nicht gibt (Da die Methode ja public ist, müsste sie ja normal verfügbar sein). Hmm, hab ich noch was vergessen? :eek:
Es wird auch keine andere Methode vom ImagePanel angezeigt. (Hab mal testweise noch eine gemacht).


Edit:
Hatte mein ImagePanel als JFrame angelegt, und nicht als ImagePanel... das war der Fehler.

Danke :)

MfG
Pasukaru
 
Zuletzt bearbeitet:
Diese Zeile
Java:
private JPanel jPanelBild = null;
müsstest du noch in diese ändern:
Java:
private ImagePanel jPanelBild = null;
Und den Rückgabetyp von getJPanelBild() zu ImagePanel ändern ...
Dann sollte es gehn ...

EDIT:
Hmm... Dann muss ich das wohl doch mal selber ausführen und gucken ...
 
Zuletzt bearbeitet:
Jap, danke :) habs eben festgestellt.

Edit: achso wegen eben... ich hatte den Pfad von Bild 2 falsch angegeben :/ Sorry.
 
Zuletzt bearbeitet:
Ja, ändert sich :) geht alles ohne Probleme. Hatte eben nur den Pfad falsch angegeben. Deswegen wurde das 2. nicht angezeigt. :(
 

Neue Beiträge

Zurück