Java : je n'arrive pas a charger les images

Résolu/Fermé
Cemninho - 28 avril 2005 à 17:47
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 28 mars 2008 à 14:10
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

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 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
28 avril 2005 à 17:57
Pour charger une image :
JLabel mon_image = new JLabel(new ImageIcon("./mon_fichier_image.extension"));
1
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
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 mardi 28 février 2006 Statut Membre Dernière intervention 9 septembre 2008 6
3 juin 2007 à 20:09
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 mardi 28 février 2006 Statut Membre Dernière intervention 9 septembre 2008
27 mars 2008 à 22:25
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 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857 > miniki
28 mars 2008 à 14:10
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
excuse moi :
tu mets l'uRL de ton image dans ' new ImageIcon("");'
0
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 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
28 avril 2005 à 19:29
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