Affichage d'image en Java

Résolu
Bonjour,
Je cherche à afficher un graphique à partir d'un tableau de double contenant les ordonnées des points. Pour ce faire j'ai écrit le code suivant en Java :

import java.awt.Color; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.Graphics; 

import java.awt.image.BufferedImage; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class ImagePrint extends JFrame { 
  
 private Container container = new Container(); 
 private static final long serialVersionUID = 1L; 
   
  
 public ImagePrint(){ 
  super("ImagePrint"); 
  setDefaultCloseOperation(EXIT_ON_CLOSE); 
  JPanel panel = new PrintPanel(); 
  panel.setPreferredSize(new Dimension(320, 320)); 
  container.add(panel); 
   
 } 
  
 public class PrintPanel extends JPanel { 
  private BufferedImage img; 
  private static final long serialVersionUID = 2L; 
    
   
  public PrintPanel(){ 
   super(); 
   img = new BufferedImage(320, 320, BufferedImage.TYPE_INT_ARGB); 
  } 
   
  public void printGraphic(double[] matrix) { 
   for(int i = 0; i < matrix.length; i++) 
    img.setRGB((int)(i*((double)getWidth()+0.5)/matrix.length), (int)(matrix[i]*getHeight()/getMax(matrix)), Color.green.getRGB()); 

   repaint(); 
  } 
   
  private double getMax(double[] matrix) { 
   double max = 0.0; 
    
   for(int i = 0; i<matrix.length; i++) 
    if(max < matrix[i]) 
     max = matrix[i]; 
     
   return max; 
  } 
   
  public void paint(Graphics graph) { 
   graph.drawImage(img, 0, 0, null); 
  } 
 } 
} 


Je l'appelle ensuite à l'aide de :

ImagePrint img = new ImagePrint(); 
    
ImagePrint.PrintPanel panel = img.new PrintPanel(); 
   
panel.printGraphic(monTableau); 


Le tableau n'est pas vide, la fonctionprintGraphic est bien appelé mais aucune fenêtre ne s'ouvre. Est ce que je n'ai aps compris le fonctionnement de la méthode repaint()? Ou est-ce autre chose?

Merci de votre aide.

5 réponses

  1. Merci, j'ai réussi à faire un programme qui réponde à mes besoins à partir de ton exemple.
    1. Salut,

      Cette petite classe permet d'afficher une "courbe" composée de points successifs.

         import javax.swing.*;
         import java.awt.*;
      	
         public class DessinerDesPoints extends JFrame
         {
            private int x, y;
         
            private int w = 0;
            private int h = 0;
         
            private String point = ".";
         
            private static Font font10; // POUR LES POINTS
         
            public DessinerDesPoints()
            {
               super("DESSINER DES POINTS."); // titre
            
               setSize(400, 400); // dimensions frame
               setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               setVisible(true);
            }
         
            public void paint(Graphics g)
            {
            //dimensions de la frame
               w = getSize().width;   // selon l'écran
               h = getSize().height;  // selon l'écran
            
               super.paint(g); 
            
            
            // COULEUR ET TAILLE DU POINT
               g.setFont(font10);
               g.setColor(Color.RED);
               
            	//sachant que w = 400 et h = 400 
            	x = -1; // pour commencer en 0 lors de la première incrémentation de x dans la bouclewhile
               y = h+1; //soit y = 401 pour commencer en 400
               boolean encore = true;
            
               while(encore)
               {
                  if( (x < w) || (y > -1) )
                  {
                     x++;
                     y--;
                     // affichage d'un point au coordonnées x/y
                     g.drawString(point, x, y);
                  }
                  else
                     break;
               }
            }
         
            public static void main(String[] args)
            {
               font10 = new Font("Arial", Font.BOLD, 10);
               new DessinerDesPoints();
            }
         }

      Cordialement,

      Dan
      1. Pour l'instant pour faire des tests, je passe simplement {1.0, 2.0, 3.0}. Les abscisses sont elles tout simplement 1, 2, 3, 4,...

        A therme j'aimerais avoir des courbes, mais dans un premier temps des simples points me conviendrais.
        1. Salut,

          Mais quelles coordonnées contient le tableau matrix, où est-il créé ?

          Quelles types de figures veux-tu dessiner ?

          Dan
          1. J'ai essayé de remplacer
            repaint()

            par
            paint(img.getGraphics());

            La fonction
            graph.drawImage(img, 0, 0, null)

            me renvoie bien true, mais toujours rien ne s'affiche. Si à la place d'afficher le BufferedImage je l'enrengistre en png, le fichier image est vide.