Affichage d'image en Java
Résolu
Toto
-
Toto -
Toto -
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 :
Je l'appelle ensuite à l'aide de :
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.
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
-
J'ai essayé de remplacer
repaint()
parpaint(img.getGraphics());
La fonctiongraph.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. -
Salut,
Mais quelles coordonnées contient le tableau matrix, où est-il créé ?
Quelles types de figures veux-tu dessiner ?
Dan -
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. -
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 -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -