xman branleur | Un petit up. (édité après la réponse de replix qui corrige 1 des 2 problèmes)
Je n'avais pas posté le code sur le forum parce que je me disais que c'était peut-être un peu long (même si c'est pas non plus énorme) mais bon, pour augmenter mes chances de réponse, le voici :
Code :
- /*
- Ce programme affiche :
- - une petite image en haut à gauche d'un panel ;
- - une grille de pixels en bas à droite ;
- - un compteur de clics en haut à droite.
-
- Comme c'est un affichage compliqué, je le dessine dans
- une image à part et c'est elle qui est affichée par la
- méthode paint.
-
- Problème que je ne comprends pas :
- Comment faire pour que ça s'affiche correctement au démarrage ?
- Je n'ai l'affichage voulu qu'au moment où je clique pour la
- première fois alors que je dessine l'image dans le buffer dès
- la construction de mon panel.
- Les seuls trucs qui sontt dessinés dans mon buffer la 1ère fois
- sont le compteur (du texte) et l'image (parce que j'ai mis
- un media tracker). Je vais péter un cable sur ce problème !
- */
- import java.awt.*;
- import java.awt.event.*;
- import java.awt.image.*;
- import javax.swing.*;
- public class Dessin extends JPanel
- {
- private Image petiteImage;
- private BufferedImage image;
- private Graphics buffer;
- private Integer compteur;
- // -- Constructeur --
- Dessin()
- {
- petiteImage = getToolkit().createImage("avatar.jpg" );
- try
- {
- MediaTracker tracker = new MediaTracker(this);
- tracker.addImage(petiteImage, 0);
- tracker.waitForID(0);
- } catch (Exception e) {}
- setPreferredSize(new Dimension(512,512));
- compteur = 0;
- addMouseListener
- (
- new MouseAdapter()
- {
- public void mouseClicked(MouseEvent e)
- {
- compteur++;
- redessiner();
- }
- }
- );
- image = new BufferedImage(512,512,BufferedImage.TYPE_INT_ARGB);
- buffer = image.getGraphics();
- redessiner();
- }
- // -- Redessiner le buffer image --
- public void redessiner()
- {
- buffer.setColor(Color.white);
- buffer.fillRect(0,0, 512,512);
- buffer.drawImage(petiteImage,10,10,null);
- buffer.setColor(Color.black);
- buffer.drawString(compteur.toString(),512-50,16);
- // Dessiner une grille de pixels (j'ai fait exprès de faire un truc lent)
- int i,j;
- for (i=256 ; i < getWidth() ; i++)
- for (j=256 ; j < getHeight(); j++)
- {
- if ((i+j)%2 == 0)
- buffer.drawLine(i,j,i,j);
- }
- repaint();
- }
- public void paint(Graphics g)
- {
- g.drawImage(image,0,0,this);
- }
- // -- Création de l'interface graphique --
- private static void creerGUI()
- {
- final Dessin dessin = new Dessin();
- // Création de la fenetre dans laquelle on integre notre programme
- JFrame frame = new JFrame("Dessin" );
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.setContentPane(dessin);
- frame.setResizable(false);
- frame.pack();
- frame.setVisible(true);
- }
- // Au lancement, on crée la GUI qui va instancier et lancer le programme
- public static void main(String[] args)
- {
- javax.swing.SwingUtilities.invokeLater
- (
- new Runnable() { public void run() { creerGUI(); } }
- );
- }
- }
|
Si vous voyez des erreurs / trucs qu'il faudrait faire autrement, dites-moi, je débute et suis désireux d'apprendre. Message édité par xman le 22-02-2005 à 15:06:46 ---------------
Bon, puisque presque tout le monde a une signature, ben moi aussi ! Na !
|