2017-05-04 4 views
1

J'ai réduit mes codes à une fonction aussi simple: montrer une image sur une fenêtre. Mais pourquoi l'image n'apparaît pas mais j'ai essayé? Je crée un JFrame, puis crée un JPanel qui devrait montrer l'image. Ensuite, ajoutez le panneau au cadre. Au fait, j'ai importé l'image et j'ai double-cliqué dessus pour obtenir l'URL.L'image n'apparaît pas sur la fenêtre

import java.awt.*; 

import javax.swing.*; 

import com.sun.prism.Graphics; 

public class GUI { 
    JFrame frame=new JFrame("My game"); 
    JPanel gamePanel=new JPanel(); 

    public static void main(String[] args){ 
     GUI gui=new GUI(); 
     gui.go(); 
    } 

    public void go(){ 

     frame.setSize(300, 400); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     Background backPic=new Background(); 
     backPic.setVisible(true); 
     frame.getContentPane().add(backPic);   

     JPanel contentPane=(JPanel) frame.getContentPane(); 
     contentPane.setOpaque(false); 

     frame.setVisible(true); 
     } 

    class Background extends JPanel{ 
      public void paintComponent(Graphics g){ 
       ImageIcon backgroundIcon=new   ImageIcon("file:///E:/eclipse/EL/backgroundPicture.jpg"); 
       Image backgroundPic=backgroundIcon.getImage(); 

       Graphics2D g2D=(Graphics2D) g; 
       g2D.drawImage(backgroundPic,0,0,this); 
      } 
     } 
} 

Répondre

2

C'est parce que vous avez importé com.sun.prism.Graphics. Cela devrait être java.awt.Graphics.

Je voudrais également me débarrasser du bit "file: ///" de votre chemin. Et vous ne voulez probablement pas charger l'image sur chaque événement de peinture. Voici une meilleure version de la classe de base; -

class Background extends JPanel { 

    Image backgroundPic; 

    public Background() { 
     ImageIcon backgroundIcon=new ImageIcon("E:/eclipse/EL/backgroundPicture.jpg"); 
     backgroundPic=backgroundIcon.getImage(); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2D=(Graphics2D) g; 
     g2D.drawImage(backgroundPic,10,10,this); 
    } 
} 
+2

Ce qui signifie que vous fournissez une nouvelle méthode'paintComponent (com.sun.prism.Graphics) 'et ne surchargez pas paintComponent (java.awt.Graphics). –

+3

@DavidGilbert * "Ce qui signifie que vous fournissez une nouvelle méthode" * Une raison pour laquelle '@ Override' devrait être spécifié sur n'importe quelle méthode substituée. Il est pratique d'obtenir des avertissements du compilateur que nous sommes sur la mauvaise voie, avant que le train de marchandises n'arrive .. –

+0

Et cela signifie que je dois aussi importer l'image, non? Si je supprime l'image que j'ai importée, elle n'apparaît plus. Et quelle est la fonction de "super.paintComponent (g)"? – EstellaGu