Partage
  • Partager sur Facebook
  • Partager sur Twitter

Dessiner un grand nombre d'images

    25 mai 2015 à 17:04:49

    Bonjour !

    Je poste ce message car je souhaiterais votre aide pour écrire une boucle me permettant d'afficher plusieurs images stockées dans un tableau.

    Je dispose d' un : ' tableau[] ' regroupant mes images de 32*32.

    En général pour afficher une image sur ma JFrame je fais comme suit :

    - Je declare un JPanel

    - Je déclare un JLabel

    - Je déclate une ImageIcon

    - ImageIcon est ajoutée au JLabel

    - Le JLabel est ajouté au JPanel

    - le JPanel est ajouté à la JFrame

    - J'affiche ma JFrame.

    Maintenant supposons que je veux afficher mes images à la suite histoire de 'remplir' ma fenêtre. Il est clair que je ne vais pas m'amuser à créer X^10 JLabel et ImageIcon.. Du moins je pense que c'est n'est pas très correct et que cela risque de demander beaucoup de ressources (mais je me trompe peut être).

    Pour le coup je me suis dis qu'il s'agirait de 2 boucles For imbriquée mais je ne sais pas quoi faire dans cette boucle, ou du moins quelles fonctions utiliser pour afficher mes images.

    Avez-vous une idée ?

    Cordialement !

    • Partager sur Facebook
    • Partager sur Twitter
      26 mai 2015 à 4:15:23

      Voilà comment je m'y prendrais :

      public void paintComponent(Graphics g)
      		{
      			int ROW_COUNT = 5;
      			int COLUMN_COUNT = 5;
      			
      			int IMAGE_SIZE = 32;
      			
      			String PATH = "icon.PNG";
      			
      			Image[] array = new Image[16];
      			
      			try
      			{
      				for (int i = 0; i < array.length; i++)
      					array[i] = ImageIO.read(new File(PATH));
      			}
      			catch(IOException e)
      			{
      				return;
      			}
      			
      			for (int y = 0; y < ROW_COUNT; y++)
      				for (int x = 0; x < COLUMN_COUNT; x++)
      					if (x + y * ROW_COUNT < array.length)
      						g.drawImage(array[x + y * ROW_COUNT], x * IMAGE_SIZE, y * IMAGE_SIZE, this);
      		}

      Comme je ne dispose pas d'une collection d'images, je me contente d'afficher la même plusieurs fois.

      Aussi, en pratique, une même image ne devrait pas être chargée plusieurs fois et il ne faut pas charger les images à chaque affichage mais une seule fois (dans le constructeur de la classe, par exemple).

      La fonction permettant d'afficher une image du tableau est drawImage(Image i, int x, int y, JPanel p).

      Est-ce que c'est ce que tu voulais ?

      -
      Edité par Myrcellion 26 mai 2015 à 4:19:07

      • Partager sur Facebook
      • Partager sur Twitter
        26 mai 2015 à 9:29:24

        Ta solution me semble très bien pour mon problème mais au juste comment puis-je l'appeler ? En tapant paintComponent(Graphics g); là ou je souhaite qu'il s'exécute ?
        • Partager sur Facebook
        • Partager sur Twitter
          26 mai 2015 à 9:44:47

          Dans toutes les classes héritant de JPanel, il y a une fonction paintComponent qui est appelée automatiquement quand le programme veut afficher le JPanel.

          Donc tu pourrais écrire une classe Panel qui contiendrait uniquement la fonction paintComponent (mais tu devrais ajouter un constructeur pour charger les images et une variable de type Image[] pour stocker les images et ne pas avoir à les charger dans paintComponent).

          (Pour que ta classe Panel hérite de JPanel -> public class Panel extends JPanel, mais tu connais déjà)

          Et attention, si tu veux ajouter des boutons par exemple, ils devraient se trouver dans un autre JPanel dans lequel tu n'auras pas redéfini la fonction paintComponent. Donc la classe Panel sert vraiment uniquement à afficher les icônes.

          Si ce n'est pas clair, n'hésite pas à me dire ce qu'il y a à reformuler.

          • Partager sur Facebook
          • Partager sur Twitter
            26 mai 2015 à 11:33:02

            Non non ton explication m'est tout à fait clair et je vais me pencher sur ta résolution !

            Un grand merci.

            • Partager sur Facebook
            • Partager sur Twitter

            Dessiner un grand nombre d'images

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown