Java : je n'arrive pas a charger les images

Résolu
Cemninho -  
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour je suis étudiant et je travaille sur un jeu d'échec. Je suis encore débutant, et j'aimerais savoir comment je pourrais charger des images de pieces pour mon code ci-dessous. merci
import java.awt.*;
import java.awt.Image;
import java.awt.event.*;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.ButtonGroup;
import javax.swing.JMenuBar;
import javax.swing.KeyStroke;
import javax.swing.ImageIcon;

import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JFrame;
import javax.swing.JButton;

/* MenuLookDemo.java is a 1.4 application that requires images/middle.gif. */

/*
 * This class exists solely to show you what menus look like.
 * It has no menu-related event handling.
 */
class pion{
  Image img;
  
}
public class Chess {
    JTextArea output;
    JScrollPane scrollPane;


    public JMenuBar createMenuBar() {
        JMenuBar menuBar;
        JMenu menu, submenu;
        JMenuItem menuItem;
        JRadioButtonMenuItem rbMenuItem;
        JCheckBoxMenuItem cbMenuItem;

        //Create the menu bar.
        menuBar = new JMenuBar();

        //Build the first menu.
        menu = new JMenu("Game");
        menu.setMnemonic(KeyEvent.VK_A);
        menu.getAccessibleContext().setAccessibleDescription(
                "The only menu in this program that has menu items");
        menuBar.add(menu);
             ImageIcon icon = createImageIcon("images/nba.gif");
        menuItem = new JMenuItem("Nouveau jeu", icon);
        //menuItem.setMnemonic(KeyEvent.VK_T); //used constructor instead
        menuItem.setAccelerator(KeyStroke.getKeyStroke(
                KeyEvent.VK_1, ActionEvent.ALT_MASK));
        menuItem.getAccessibleContext().setAccessibleDescription(
                "Recommencer une partie");
        menu.add(menuItem);

         menu.addSeparator();
        submenu = new JMenu("A submenu");
        submenu.setMnemonic(KeyEvent.VK_S);

        menuItem = new JMenuItem("An item in the submenu");
        menuItem.setAccelerator(KeyStroke.getKeyStroke(
                KeyEvent.VK_2, ActionEvent.ALT_MASK));
        submenu.add(menuItem);

        menuItem = new JMenuItem("Another item");
        submenu.add(menuItem);
        menu.add(submenu);

        //Build second menu in the menu bar.
        menu = new JMenu("Another Menu");
        menu.setMnemonic(KeyEvent.VK_N);
        menu.getAccessibleContext().setAccessibleDescription(
                "This menu does nothing");
        menuBar.add(menu);

        return menuBar;
    } 

    public Container createContentPane() {
        //Create the content-pane-to-be.
       JPanel contentPane = new JPanel(new BorderLayout());
       contentPane.setOpaque(true);
                 JPanel btns[] = new JPanel[64]; 
            JPanel board = new JPanel();
       board.setLayout(new GridLayout(8,8)); 
            int ii = 0; 
        for(int i = 0; i < btns.length; i++) 
        { 
        if(i % 8 == 0)ii++; 
        btns[i] = new JPanel(); 
        btns[i].setBackground(ii % 2 == 1? Color.WHITE:Color.BLACK); 
        btns[i].setPreferredSize(new Dimension(80,80)); 
        board.add(btns[i]); 
        ii++;
        }
      
        contentPane.add(board, BorderLayout.CENTER);

        return contentPane;
    }

    /** Returns an ImageIcon, or null if the path was invalid. */
    protected static ImageIcon createImageIcon(String path) {
        java.net.URL imgURL = Chess.class.getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("Couldn't find file: " + path);
            return null;
        }
    }

    private static void createAndShowGUI(){
        //Make sure we have nice window decorations.
        JFrame.setDefaultLookAndFeelDecorated(true);

        //Create and set up the window.
        JFrame frame = new JFrame("Chess STPI v.1.0");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        Chess demo = new Chess();

        frame.setContentPane(demo.createContentPane());
             frame.setJMenuBar(demo.createMenuBar());
        frame.getContentPane();



        //Display the window.
        frame.setSize(800, 600);
        frame.setVisible(true);
    }
    public static void main(String[] args) {
          javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });

    }
}
A voir également:

6 réponses

stef
 
tu as essayé tout simplement de remplacer ton code
if(i % 8 == 0)ii++; 
        btns[i] = new JPanel(); 
        btns[i].setBackground(ii % 2 == 1? Color.WHITE:Color.BLACK); 
        btns[i].setPreferredSize(new Dimension(80,80)); 
        board.add(btns[i]); 
        ii++;
        }

par :
if(i % 8 == 0)ii++; 
        btns[i] = new JPanel(); 
        final Icon Img[i] = new ImageIcon("");
        btns[i].add(Img[i]);
        btns[i].setBackground(ii % 2 == 1? Color.WHITE:Color.BLACK); 
        btns[i].setPreferredSize(new Dimension(80,80)); 
        board.add(btns[i]); 
        ii++;
        }
2
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857
 
Pour charger une image :
JLabel mon_image = new JLabel(new ImageIcon("./mon_fichier_image.extension"));
1
Cemninho
 
Merci kij_82 ta méthode a fonctionné, c'est cool de m'avoir aidé ! jremercie aussi ceux qui ont essayé ! Si G encore un soucis jreviendrai poser la question ! bye
1
Psal78
 
Bonjour, j'ai à peu près le même problème, mais le chemin de mon image est un chemin absolu (C:/ ...) et cela ne fonctionne pas...
Comment puis-je faire pour que cela fonctionne?

Merci d'avance
1
supfred Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   6
 
et si tu mets l'image directement dans ton projet je pense que tu pourras te contenter de son nom sinon si je me rappel bien considére ton projet comme le debut du chemin tu n'aurs plus qu'a indiquer les dossiers et sous dossier dans lesquel se trouve ton image .
ex dans mon prjet j'ai créé un dossier Image qui contiend mes image j'inscrirai alors Image/monimage.gif

As tu compris?
0
miniki > supfred Messages postés 22 Date d'inscription   Statut Membre Dernière intervention  
 
JLabel mon_image = new JLabel(new ImageIcon("Images/Volant.JPEG"));

comme tu le dis, dans ton message, mais le dossier Images doit se trouver dans ton projet c'est a dire dans le dossier Src?
0
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857 > miniki
 
Qu'importe dans quel répertoire les images se situe tant que ce répertoire est défini comme un répertoire source dans la configuration du projet (clic droit sur projet->Properties->Java Build Path->Onglet 'Sources'
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
stef
 
excuse moi :
tu mets l'uRL de ton image dans ' new ImageIcon("");'
0
Cemniho
 
Stef désolé maist a méthode ne marche pas le compilateur me signale une erreur.
kij_82 ta solution fonctionne mais j'ais fais un essai : j'ai esayé d'ajouter la meme image sur toutes les cases pour voir si ça allé fonctionner (code ci dessous) mais jme suis rendu compte kil n'y a que la derniere case sur laquelle l'image s'affiche. Quelqu'un sait pourquoi ? merci
   public Container createContentPane() {
        //Create the content-pane-to-be.
       JPanel contentPane = new JPanel(new BorderLayout());
       JLabel img = new JLabel(new ImageIcon("./Images/0.gif")); 
       contentPane.setOpaque(true);
		 JPanel btns[] = new JPanel[64]; 
	    JPanel board = new JPanel();
       board.setLayout(new GridLayout(8,8)); 
	    int ii = 0; 
        for(int i = 0; i < btns.length; i++) 
        { 
        if(i % 8 == 0)ii++; 
        btns[i] = new JPanel(); 
        btns[i].setBackground(ii % 2 == 1? Color.WHITE:Color.BLACK); 
        btns[i].setPreferredSize(new Dimension(80,80)); 
        btns[i].add(img);
        board.add(btns[i]); 
        ii++;
        }
0
kij_82 Messages postés 4089 Date d'inscription   Statut Contributeur Dernière intervention   857
 
C'est normal, tu doit creer unnouvel objet à chaque fois car la tu ne fait que référencer le même objet pour toutes tes cases.
Remplace :
btns[i].add(img);

Par :
btns[i].add( new JLabel(new ImageIcon("./Images/0.gif")) );

Et tu enleve :
JLabel img = new JLabel(new ImageIcon("./Images/0.gif")); 


Si apres ca ca marche pas, ca vient de l'organisation de tes JPanel.

++
0