Affichage d'image en Java

Résolu/Fermé
Toto - Modifié par Toto le 3/11/2011 à 14:49
 Toto - 8 nov. 2011 à 09:54
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.
A voir également:

5 réponses

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
Utilisateur anonyme
3 nov. 2011 à 18:41
Salut,

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

Quelles types de figures veux-tu dessiner ?

Dan
0
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
Utilisateur anonyme
6 nov. 2011 à 07:50
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

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

Posez votre question
Merci, j'ai réussi à faire un programme qui réponde à mes besoins à partir de ton exemple.
0