2016-03-22 13 views
1

Ich muss eine GUI erstellen, und ich möchte wirklich einen Hintergrund festlegen. Um dies zu tun, habe ich eine Klasse namens "Backround" erstellt, wo ich die paintComponent-Methode verwende. Ich gab ihm die Datei, die ich im Hintergrund einstellen wollte und es funktionierte.JPanel Speicherort Probleme

Hier ist mein Hintergrund Klasse:

public class Background extends JPanel 
{ 
    public void paintComponent(Graphics g) 
    { 
     try { 
       Image img = ImageIO.read(new File("./fond.jpg")); 
       g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this); 
     } 

     catch (IOException e) { 
     e.printStackTrace(); 
     } 
    }    
} 

Sobald jedoch das Bild auf dem Hintergrund ist, die Platten, die auf meinem Rahmen in der gleichen Position nicht mehr sind, waren und ich habe wirklich keine Ahnung, wie man behebe das und habe noch keine relevanten Themen dazu gefunden. Hier

ist ein Zitat aus meiner Klasse, wo ich beschreibe die GUI:

this.setContentPane(new Background()); 

    this.setTitle("Arena");          
    this.setSize(800, 500);          
    this.setLocationRelativeTo(null);       
    //this.setLayout(new FlowLayout(FlowLayout.CENTER)); 
    //this.setLayout(null); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   

    this.setVisible(true);        


    // ******************************************** PANEL 1 ****************************************** 

    Panel P1 = new Panel(); 
    this.add("NORTH", P1); 
    P1.setLayout(new FlowLayout()); 
    P1.add(new Label ("Joueur 1")); 
    P1.add(new Label ("Action")); 
    P1.add(new Label ("Joueur 2")); 
    //P1.setVisible(true); 


    // ********************************************* PANEL 2 ****************************************** 


    Panel P2 = new Panel(); 

    P2.setLayout(new FlowLayout()); 

    P2.add(Liste1); 

    // Boutons 
    Button B1 = new Button("FIGHT"); 
    P2.add(B1); 
    Button B2 = new Button("HEAL"); 
    P2.add(B2); 

    P2.add(Liste2); 
    this.add("WEST", P2); 
// P2.setVisible(true); 

Außerdem, wenn ich den Anruf zu meinem Hintergrund Konstruktor zu entfernen, werden die Platten wieder in ihre inital Standorten zu bekommen.

Ich hoffe, Sie könnten mir helfen oder mich umleiten!

Danke!

Antoine Sbert

+0

Sie haben festgestellt haben, versucht, repaint() aufzurufen; und revalidate(); ? –

+0

Ja, aber es scheint nichts zu ändern ... Ich werde es nochmal versuchen, um zu sehen, ob es repariert werden kann! – Sbert

+0

Sie fügen WEST - NORTH hinzu, aber es hat kein Layout-Borderlayout - Sie müssen das löschen: Frame hat ein bestimmtes Layout, dann fügen Sie es hinzu – gpasch

Antwort

2
  1. Stellen Sie sicher, super.paintComponent rufen, bevor Sie Kunden Lackierarbeiten
  2. nicht Ressourcen geladen werden (wie Bilder) aus mit in der Lackverfahren, wird dies einen Einfluss auf die Leistung haben Sie Programm
  3. JPanel standardmäßig verwenden Sie eine FlowLayout, aber Sie ändern nie das Layout, nachdem Sie die Background Panel als contentPane anwenden. Nach setContentPane Aufruf verwenden setLayout(new BorderLayout()) oder das Layout in den Klassen Konstruktor gelten (zur gleichen Zeit, wenn Sie das Bild laden)
  4. Stellen Sie sicher, zuletzt setVisible Sie anrufen, nachdem Sie die grundlegenden UI
+0

danke! Ich habe endlich herausgefunden, wie ich meine GUI so aussehen lassen kann, wie ich es wollte. Wenn Sie mir einen anderen Weg schicken könnten, Ressourcen zu laden, würde ich es schätzen! – Sbert

+0

Preload sie, vielleicht im Konstruktor statt? – MadProgrammer

+0

Das habe ich gemacht, indem ich den paintComponent-Konstruktor überlastet habe. – Sbert