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. 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.
    0
    1. Salut,

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

      Quelles types de figures veux-tu dessiner ?

      Dan
      0
      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.
        0
        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
          0
          1. Merci, j'ai réussi à faire un programme qui réponde à mes besoins à partir de ton exemple.
            0