2D-Grafik Hintergrundbild für JFrame

  • Themenstarter Themenstarter Ro0kie
  • Beginndatum Beginndatum
R

Ro0kie

Gast
Liebe Java-Programmierer oder sonistige Coder !

Ich suche schon verzweifelnd seit 3 Tagen eine Lösung für mein Problem.:frown:
Ich würde gern ein Hintergrundbild für mein JFrame erstellen nur das Problem ist ich weiß nicht wie ich die ganzen Code-Beispiele die ich in Google gefunden hab auf mein Projekt über tragen soll?😕
mein Google raucht schon und ich komme trotzdem nicht wieter :notrust:

Wie folgt sieht es aus 2 Klassen + eine innere Klasse:

Klasse BallspielPanel:
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/**
 *Panel für die Ballspiel-App. .
 *
 * @author Martin S.
 * @version 2011-01-24
 */
public class BallspielPanel extends JPanel {

    private Button east,west,south,north;
    private JLabel ball,feld;
    private ImageIcon icon,icon2;
    private JPanel panel;
    private int x,y,width,height;
    /**
     * Standard-Konstruktor zum deklarieren,initaliserien und hinzufügen der
     * GUI-Elemente.
     */
    public BallspielPanel(){
        //Int-Variablen init.
        x =5;
        y =30;
        width =75;
        height =75;

        //Layout setzen
        setLayout(new BorderLayout());


        //Spielfigur, und Spielfeld init. und hinzufügen
        /**
         * Fügt ein Icon auf den Button hinzu.
         * Methode aus der Java-API
         */
        icon = new ImageIcon (BallspielPanel.class.getResource("fball.png"));
        icon2 = new ImageIcon (BallspielPanel.class.getResource("field.png"));
        ball =new JLabel(icon);
        
        
        

        //Buttons init. und hinzufügen
        ball.setBounds(x,y,width,height);
        feld.setBounds (x,y,500,550);
        east = new Button("O");
        west = new Button("W");
        south = new Button("S");
        north = new Button("N");

        add(east,BorderLayout.EAST);
        add(west,BorderLayout.WEST);
        add(south,BorderLayout.SOUTH);
        add(north,BorderLayout.NORTH);

        //Panel init. und hinzufügen
        panel = new JPanel();
        add(panel,BorderLayout.CENTER);
        panel.setLayout(null);
        panel.add(ball);
        
        
        
        
        ////ActionListener Objekt erzeugen
        BallspielAction h =new BallspielAction();
        east.addActionListener(h);
        west.addActionListener(h);
        south.addActionListener(h);
        north.addActionListener(h);
        }

   /**
    *Innere Klasse, für die einzelnen Aktionen.
    *
    */
    private class BallspielAction implements ActionListener{

            /**
             * Methode,für die einzelen Buttonklicks,usw... .
             *
             * @param e
             */
             public void actionPerformed (ActionEvent e){

                 //Ballsteuereung erstellen

                 if(e.getSource()==east){

                     //Begrenzung rechts
                     if(x+50<panel.getWidth()-75){
                         ball.setBounds(x=x+75,y,width,height);   
                     }
                 }

                 if(e.getSource()==west){

                     //Begrenzung links
                     if(x>75){
                        ball.setBounds(x=x-50,y,width,height);
                     }
                     else{
                        ball.setBounds(0, y, width, height);
                        x=0;
                     }
                 }

                  if(e.getSource()==north){

                    //Begrenzung oben
                    if(y>50){
                         ball.setBounds(x,y=y-50,width,height);
                     }
                     else{
                          ball.setBounds(x,0,width,height);
                          y=0;
                      }
                 }

                 //Begrenzung unten
                  if(e.getSource()==south){
                      if(y+50<panel.getHeight()-75){
                        ball.setBounds(x,y=y+50,width,height);
                      }
                      else{
                        ball.setBounds(x,panel.getHeight()-75, width, height);
                        y=panel.getHeight()-75;
                      }
                 }




             }
        

        

        
        

    }
}
Klasse BallspielGUI:
Java:
import javax.swing.JFrame;
import java.awt.*;
/**
 *Spiel für die Langeweile.
 * Durch drücken einzelner Buttons wird eine Spielfigur bewegt.
 * Ziel des Spieles gibt es keines.
 *
 * @author Martin S.
 * @version 2011-02-24
 */
public class BallspielGUI extends JFrame {
        /**
     *Standard-Main Methode
     *
     * @param args
     */
    public static void main(String[] args){
         new BallspielGUI();
    }

    /**
     *Standard-Konstruktor zum setzen der Fenstergröße,Name,Schließ-Aktion
     * und der Sichtbarkeit.
     */
    public BallspielGUI(){
        //Titelzeile setzen
        setTitle("Futball");

        //Schließ-Aktion setzen
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //ZiffernanzeigePanel einfügen
    Container Con = this.getContentPane();
    Con.add(new BallspielPanel());

    //Sichtbarkeit des Fensters einstellen
    setVisible(true);

    //Fixe Fenstergröße setzen
    setSize(500,550);
    setResizable ( false );



    }
}

Nun hätte ich gerne in der Klasse BallspielPanel direkt unter dem Zeilen Kommentar + Blocksatzkommentar ://Spielfigur, und Spielfeld init. und hinzufügen
Ein Hintergrundbild eingefügt.Ich bitte um einfache Erklärungen da ich mit der Schule erst im 2 Lehrjahr bin. 🙁

Danke im voraus :smile::thumbup:

lG Ro0kie
 
du hast einfach nur vergessen dein feld zu initialisieren- tu das einfach nach der initialisierung von ball mit
[c]feld = new JLabel(icon2);[/c] und es klappt. wenn du dein programm ohne die zeile startest gibt es eine nullpointer exception das weist ziemlich häufig auch nicht initialsierte variablen hin- so kannst du solche fehler auch schnell selber ausmerzen.
 
Also ich hab den Quellcode jz nochmals über arbeitet, aber im JFrame wird jz gar nichts mehr angezeigt außer die Buttons vom Border Layout, ich weiß nicht aber irgendwie will das mit dem JLayerPane nicht hin hauen :

Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/**
 *Panel für die Ballspiel-App. .
 *
 * @author Martin S.
 * @version 2011-02-24
 */
public class BallspielPanel extends JPanel {

    private Button east,west,south,north;
    private JLabel ball,feld;
    private ImageIcon icon,icon2;
    private JPanel panel,panel2,hintergrundpanel;
    private JLayeredPane hintergrund;
    private int x,y,width,height;
    private int fx,fy,fwidth,fheight;
    /**
     * Standard-Konstruktor zum deklarieren,initaliserien und hinzufügen der
     * GUI-Elemente.
     */
    public BallspielPanel(){
        //Ball Int-Variablen init.
        x =5;
        y =30;
        width =75;
        height =75;
        //Feld Int-Variablen
        fx =0;
        fy =0;
        fwidth =500;
        fheight =500;

        //Layout setzen
        setLayout(new BorderLayout());


        //Spielfigur, und Spielfeld init.
        /**
         * Methoden aus der Java-API
         */
        icon = new ImageIcon (BallspielPanel.class.getResource("fball.png"));
        icon2 = new ImageIcon (BallspielPanel.class.getResource("field.png"));
        ball =new JLabel(icon);
        feld =new JLabel (icon2);
        ball.setBounds(x,y,width,height);
        feld.setBounds(fx,fy,fwidth,fheight);
        hintergrund =new JLayeredPane();
        hintergrundpanel = new JPanel();
        hintergrundpanel.add(hintergrund);
        add(hintergrundpanel,BorderLayout.CENTER);
        hintergrund.add(feld,new Integer(0));
        hintergrund.add(ball,new Integer (1));
        
        

        //Buttons init. und hinzufügen
        east = new Button("O");
        west = new Button("W");
        south = new Button("S");
        north = new Button("N");

        add(east,BorderLayout.EAST);
        add(west,BorderLayout.WEST);
        add(south,BorderLayout.SOUTH);
        add(north,BorderLayout.NORTH);

        //Panel init. und hinzufügen

        //Panel
        panel = new JPanel();
        panel.setLayout(null);
        panel.add(ball);

        //2.Panel
        panel2 =new JPanel();
        panel2.setLayout(null);
        panel2.add(feld);
        
        
        
        
        ////ActionListener Objekt erzeugen
        BallspielAction h =new BallspielAction();
        east.addActionListener(h);
        west.addActionListener(h);
        south.addActionListener(h);
        north.addActionListener(h);
        }

   /**
    *Innere Klasse, für die einzelnen Aktionen.
    *
    */
    private class BallspielAction implements ActionListener{

            /**
             * Methode,für die einzelen Buttonklicks,usw... .
             *
             * @param e
             */
             public void actionPerformed (ActionEvent e){

                 //Ballsteuereung erstellen

                 if(e.getSource()==east){

                     //Begrenzung rechts
                     if(x+50<panel.getWidth()-75){
                         ball.setBounds(x=x+75,y,width,height);   
                     }
                 }

                 if(e.getSource()==west){

                     //Begrenzung links
                     if(x>75){
                        ball.setBounds(x=x-50,y,width,height);
                     }
                     else{
                        ball.setBounds(0, y, width, height);
                        x=0;
                     }
                 }

                  if(e.getSource()==north){

                    //Begrenzung oben
                    if(y>50){
                         ball.setBounds(x,y=y-50,width,height);
                     }
                     else{
                          ball.setBounds(x,0,width,height);
                          y=0;
                      }
                 }

                 //Begrenzung unten
                  if(e.getSource()==south){
                      if(y+50<panel.getHeight()-75){
                        ball.setBounds(x,y=y+50,width,height);
                      }
                      else{
                        ball.setBounds(x,panel.getHeight()-75, width, height);
                        y=panel.getHeight()-75;
                      }
                 }




             }
        

        

        
        

    }
}
 

Zurück
Oben