Arriere plan

matt2421 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour, j'ai construis mon GUI et en dessous une surface ou mettre un arriere plan mais il n'apparait pas du tout. voici le code pour afficher l'image.


try{
   image = ImageIO.read(getClass().getResource("C:/Users/Ulrich/Desktop/Oc.jpeg"));
  }catch(IOException ex){System.out.println("Background not loaded !!!");}
   
  surface = new JPanel(){
   @Override
   protected void paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawImage(image, 0, 0, null); //zeichnet den Hintergrund auf "Surface"
   }
  };
  surface.setBorder(BorderFactory.createTitledBorder("Surface"));
  surface.setPreferredSize(new Dimension(width, depth));
  
  
  BorderLayout layout = new BorderLayout();
  setLayout(layout);
  
  add(controlPanel, BorderLayout.NORTH);
  add(surface, BorderLayout.CENTER);
  setTitle(title); 
  setVisible(true);
  setDefaultCloseOperation(EXIT_ON_CLOSE);
  pack();
 }





merci
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
(Re)Bonjour,

1) Il n'est pas nécessaire que surface soit un JPanel, tu peux te contenter d'un Component qui est plus haut dans la hierarchie des classes.

java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JPanel

2) drawImage prends en dernier paramètre un ImageObserver, en effet l'image peut prendre du temps à charger, donc plutôt qu'attendre qu'elle soit prête on indique qui il faudra rappeler lorsqu'elle le sera, sinon elle ne s'affichera pas automatiquement.

3) pour le chargement de l'image je te conseilles d'utiliser Toolkit

4) le pack() doit être fait avant le setVisible(true) sinon la fenêtre peut clignoter car elle va être affichée avec sa taille par défaut avant d'être redimensionnée.

image = Toolkit.getDefaultToolkit().getImage(
    getClass().getResource("C:/Users/Ulrich/Desktop/Oc.jpeg"));

surface = new Container() {
    @Override
    public void paint(Graphics g) {
        g.drawImage(image, 0, 0, this);
    }
});
0
matt2421 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
je l'ai essayé ta methode, mais jusque la rien ne se passe!
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Le code suivant fonctionne (je l'ai fait ce week end pour un autre programme), tu peux t'en servir comme base, l'adapter à tes besoins et voir à quoi moment ça casse...

   private static void show(final Image image) {
        final JFrame frame = new JFrame();
        frame.setSize(250, 300);
        frame.setContentPane(new Container() {
            private static final long serialVersionUID = 1;
            public void paint(Graphics g) {
                g.drawImage(image, 0, 0, frame);
            }
        });
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
0
matt2421 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
desole ! j'ai suivi tes indications mais ca ne fonctionne pas...
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Si même avec mon code l'image ne s'affiche pas, c'est que c'est l'image le problème...
0
matt2421 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
dans le second code, le lien de mon image je le mets precisement ou???? peut etre il est la le probleme
0