JPanel, Hintergrundbilder GUI

Shooter2k

Erfahrenes Mitglied
Hallo liebes Forum,
ich habe ein Problem mit den Hintergrundbildern auf einen JPanel. Auf klick von Button1 soll ein Hintergrundbild angezeigt werden. Alle weiteren Elemente darüber(Labels, Buttons).

Bei klick von Button2 soll ein anderes Hintergrundbild angezeigt werden mit anderen Labels und Buttons.

Dazu habe ich im Netz auch schon ein Beispiel gefunden, weis aber nicht wie ich meine Anwendung umbauen soll um das zum laufen zu bringen.

Das lauffähige Beispiel ausn Netz:
Code:
package Paket;

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.beans.Visibility;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class JBackgroundPanel extends JPanel{

   private BufferedImage img;
   
   public JBackgroundPanel() {
    // load the background image
    try {
    img = ImageIO.read(new File("./bin/bgBild1.jpg"));
    } catch(IOException e) {
       System.out.print("bild nicht gefunden");
    //e.printStackTrace();
    }
    }
   
   @Override
    protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    // paint the background image and scale it to fill the entire space
    g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
    }
   
   
   public static void main(String[] args) {
     // TODO Auto-generated method stub
     JBackgroundPanel bgPanel = new JBackgroundPanel();
     
     
     // add some elements...
     bgPanel.add(new JLabel("Applications don't have to look boring!"));
     bgPanel.add(new JComboBox(new String[] {"Background 1", "Background 2"}));
     bgPanel.add(new JButton("True"));
     
     // create a window
     JFrame f = new JFrame("JPanel with background image");
     
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     f.setSize(500, 250);
     f.setLocationRelativeTo(null);
     
     // add the panel with the background image
     f.add(bgPanel);
     
     // show the window
     f.setVisible(true);
     
   }

}

Jetzt zu meiner Anwendung. Beim starten wird die Methode "contentPane.add(contentPanel1(), "test");" aufgerufen.
contentPanel1() liefert einen JPanel zurück. In der Methode contentPanel1, sollte nun das Hintergrundbild gebaut und angezeigt werden. Komme aber leider nicht weiter :-(

Code:
package Paket;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.*;
public class MainGUI extends JFrame{
     private static final long serialVersionUID = 1L;
     private JButton btn1, btn2;
     private JPanel contentPane;
     
     
     
     actionListener al = new actionListener();
     MenuActionListener ma = new MenuActionListener();
     
     public MainGUI(){
     super("TEST");
     
     contentPane = new JPanel();
     contentPane.setLayout(new CardLayout());
     
     
     
     contentPane.add(contentPanel1(), "test");
     contentPane.add(contentPanel2(), "test2");
     
     
     setContentPane(contentPane);
     pack();
   
   
   }
   
   
   public JPanel contentPanel1()
   {
     JPanel panel = new JPanel();
     // Hier Hintergrundbild bauen/einbinden
     
     JLabel lbltest = new JLabel("adasdsa234");
     btn1 = new JButton("asdasdas");
     
     btn1.addActionListener(al);
     
     panel.add(btn1);
     
     panel.add(lbltest);
     panel.setBackground(Color.cyan);
     
     
     return panel;
   }
   
   
   public JPanel contentPanel2()
   {
     JPanel panel = new JPanel();
     // Hier anderen Hintergrundbild
     btn2 = new JButton("zurück");
     btn2.addActionListener(al);
     panel.add(btn2);
     panel.setBackground(Color.BLUE);
     
     return panel;
   }
   
   
   /************************************** Actions here ******************************************/
   public class actionListener implements ActionListener{
   
     
     @Override
     public void actionPerformed(ActionEvent e) {
       CardLayout layout = (CardLayout) getContentPane().getLayout();
       
       JButton src = (JButton) e.getSource();
       if(src.equals(btn1))
       {
       
       layout.show(contentPane, "test2");
       
       }
       
       if(src.equals(btn2))
       {
       layout.show(contentPane, "test");
       }
     
     }
     
   }
   
   class MenuActionListener implements ActionListener {
     public void actionPerformed(ActionEvent e) {
     
     
       if(e.getActionCommand()=="Beenden")
       {
       System.out.print("exit");
       System.exit(0);
       }
     
     
     }
   }
   
   
   
   public static void main(String[] args){
     new MainGUI().setVisible(true);
   }
     
   
}

Ich hoffe es kann mir jemand helfen. Vielen Dank dafür.
Gruß
fetcher
 
Hallo, habe es hinbekommen :)
Code:
public JPanel contentPanel1()
   {
     JPanel panel = new JPanel(){
       @Override
  public void paintComponent(Graphics g) {
  super.paintComponent(g);
  g.drawImage(backgroundImage, 0, 0, null);
  }

  @Override
  public Dimension getPreferredSize() {
  return new Dimension(
  backgroundImage.getWidth(null),
  backgroundImage.getHeight(null));
  }
       
     };
 
Zurück