Comment faire clignoter des éléments graphiques ?

Comment faire clignoter des éléments graphiques ? - Java - Programmation

Marsh Posté le 19-10-2002 à 01:12:23    

Je dois coder quelques éléments graphiques qui doivent clignoter,
par exemple une ligne qui change périodiquement toutes les 1/2 secondes de couleur, et j'y arrive pas.
C'est urgent, si qq'un a une solution, il me rendrait un grand service. Même un bout de code serait suffisant.
Merci :)
J'i essayé en faisant un thread qui gère le dessin et qui fait des changements de couleurs puis des sleep mais j'y arrive pas.

Reply

Marsh Posté le 19-10-2002 à 01:12:23   

Reply

Marsh Posté le 19-10-2002 à 15:45:43    

c'est pourtant comme ça qu'il faut faire....j'ai fait comme ça, et ça marche, en gros :
   

Code :
  1. class MonComposant extends Canvas implements Runnable {
  2. ....
  3. thread t;
  4. public boolean draw= true;
  5. ...
  6. public void paint(Graphics g) {
  7.    if (draw) {
  8.       // Le code pour dessiner ton composant ici
  9.     } else {
  10.       g.fillRect(0, 0, getSize().width, getSize().height);
  11.     }
  12. }
  13. public void run() {
  14.     while (alive) {
  15.        draw != draw;
  16.        paint(getGraphics());
  17.        try {
  18.            thread.sleep(timeout);
  19.        } catch (InterruptedException e) {
  20.        }
  21.     }
  22. }

 
 
Bon, je suis pas sûr de moi, pasque j'ai pas mon code sous la main, mais bon, c'est qqchose dans ce goût là....Si ça marche pas, maile moi : je t'enverrai du code qui marche lundi....

Reply

Marsh Posté le 20-10-2002 à 13:44:06    

ou alors tu peux faire plus propre en implementant plusieurs renderers par composant, et gerer le clignotement (donc le changement de renderer) par un javax.swing.Timer. Ca te permettrait de ne pas appeler explicitement de Thread, etde ne pas d'embeter avec des synchros eventuelles (le Timer fonctionne dans le DispatchingThread). En plus si t'as plusieurs composants ils clignoteront de maniere coordonnee.


Message édité par Gonzoide le 20-10-2002 à 13:44:30
Reply

Marsh Posté le 20-10-2002 à 22:29:00    

Gonzo : chuis en AWT, moi! bouhou..alors je donne des solutions en AWT! :D

Reply

Marsh Posté le 21-10-2002 à 09:36:53    

Alors, un bouton qui affiche une image et qui clignote, en AWT :
(en fait, il peut aussi 'clignoter' entre 2 images)  
 
 
:  
 

Code :
  1. package atchik.util.gwidgets.alert;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import java.util.*;
  5. public class BlinkingImageButton extends BlinkingButton implements Runnable, BlinkingComponent, MouseListener {
  6.     private Vector listeners; 
  7.     private Image imgOn;
  8.     private Image imgOff;
  9.     private String actionCommand;
  10.    
  11.     private Point onOrigin;
  12.     private Point offOrigin;
  13.     private boolean enabled;
  14.    
  15.     public BlinkingImageButton(Image imageOn, Image imageOff, Dimension d) {
  16. this.imgOn = imageOn;
  17. this.imgOff = imageOff;
  18. this.addMouseListener(this);
  19. this.enabled = true;
  20. onOrigin = null;
  21. offOrigin = null;
  22. setCursor(new Cursor(Cursor.HAND_CURSOR));
  23. listeners = new Vector();
  24. setSize(d);
  25.     }
  26.    
  27.     public void setEnabled(boolean enabled) {
  28. this.enabled = enabled;
  29. if (enabled) {
  30.     setCursor(new Cursor(Cursor.HAND_CURSOR));
  31. } else {
  32.     setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
  33. }
  34.     }
  35.    
  36.     public void addActionListener(ActionListener l) {
  37. listeners.addElement(l);
  38.     } 
  39.    
  40.     public void removeActionListener(ActionListener l) {
  41. listeners.remove(l);
  42.     } 
  43.    
  44.     /** Called when the button is clicked */
  45.     public void buttonClicked() {
  46. if (enabled) {
  47.     for (int i = 0; i < listeners.size(); i++) {
  48.  ((ActionListener)listeners.elementAt(i)).actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, actionCommand));
  49.     }
  50. }
  51.     }
  52.    
  53.     public void setActionCommand(String s) {
  54. actionCommand = s;
  55.     }
  56.    
  57.     public String getActionCommand() {
  58. return actionCommand;
  59.     }
  60.    
  61.     public void paint(Graphics g) {
  62. g.setColor(getBackground());
  63. g.fillRect(0, 0, getSize().width, getSize().height);
  64. if (imgOn != null) {
  65.     if (onOrigin == null) {
  66.  onOrigin = new Point(1 + ((getSize().width -  imgOn.getWidth(this)) / 2),
  67.         1 + ((getSize().height -  imgOn.getHeight(this)) / 2));
  68.     } else {
  69.  onOrigin = new Point(0, 0);
  70.     }
  71. }
  72. if (imgOff != null) {
  73.     if (offOrigin == null) {
  74.  offOrigin = new Point(1 + ((getSize().width -  imgOff.getWidth(this)) / 2),
  75.          1 + ((getSize().height -  imgOff.getHeight(this)) / 2));
  76.     } else {
  77.  offOrigin = new Point(0, 0);
  78.     }
  79. }
  80. if (on) {
  81.     if (imgOn != null) {
  82.  g.drawImage(imgOn, onOrigin.x, onOrigin.y, getBackground(), this);
  83.     }
  84. } else {
  85.     if (imgOff != null) {
  86.  g.drawImage(imgOff, offOrigin.x, offOrigin.y, getBackground(), this);
  87.     }     
  88. }
  89.     }
  90.    
  91.    
  92.     public void mouseClicked(MouseEvent e) {
  93. buttonClicked();
  94.     }
  95.    
  96.     public void mouseEntered(MouseEvent e) {
  97.     }
  98.     public void mouseExited(MouseEvent e) {
  99.     }
  100.     public void mousePressed(MouseEvent e) {
  101.     }
  102.     public void mouseReleased(MouseEvent e) {
  103.     }
  104. }

Reply

Marsh Posté le 21-10-2002 à 18:44:18    

Merci beaucoup :)

Reply

Marsh Posté le 21-10-2002 à 21:26:41    

gfive a écrit a écrit :

Gonzo : chuis en AWT, moi! bouhou..alors je donne des solutions en AWT! :D




JDK 1.4 rulez :sol:


Message édité par Gonzoide le 21-10-2002 à 21:27:14
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed