Arriere plan

Fermé
matt2421 Messages postés 16 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 28 novembre 2016 - Modifié par KX le 8/06/2016 à 20:43
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 - 9 juin 2016 à 19:59
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

1 réponse

KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 005
8 juin 2016 à 21:02
(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 jeudi 19 mai 2016 Statut Membre Dernière intervention 28 novembre 2016
9 juin 2016 à 06:55
je l'ai essayé ta methode, mais jusque la rien ne se passe!
0
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 005
9 juin 2016 à 09:07
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 jeudi 19 mai 2016 Statut Membre Dernière intervention 28 novembre 2016
9 juin 2016 à 19:14
desole ! j'ai suivi tes indications mais ca ne fonctionne pas...
0
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 005
9 juin 2016 à 19:28
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 jeudi 19 mai 2016 Statut Membre Dernière intervention 28 novembre 2016
9 juin 2016 à 19:30
dans le second code, le lien de mon image je le mets precisement ou???? peut etre il est la le probleme
0