Clignotement de 2 couleurs dans un panel

mimi1255 Messages postés 80 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 15 février 2022 - 23 avril 2008 à 13:00
cs_papillon2000 Messages postés 94 Date d'inscription dimanche 30 avril 2006 Statut Membre Dernière intervention 21 juin 2010 - 23 févr. 2009 à 19:25
Bonjour, je souhaiterai faire clignoter un panel, cest à dire alterner deux couleurs dans un panel, mais je ne sais pas comment faire, pouvez-vous maider ?

Merci d'avance.

7 réponses

cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
23 avril 2008 à 13:30
Personnellement je n'utilise pas les Timer donc je vais te montrer une solution à base de Thread :

Le Thread qui va faire clignoter un composant
<hr size="2" width="100%" />
import java.awt.Color;
import java.awt.Component;

public class Clignoteur extends Thread {

    private Color couleur1, couleur2;
    private long temps1, temps2;
    private Component composantQuiDoitClignoter;

    private boolean estEnTrainDeClignoter;

    public Clignoteur(Color couleur1, Color couleur2, long temps1, long temps2,
            Component composantQuiDoitClignoter) {

        this.couleur1 = couleur1;
        this.couleur2 = couleur2;
        this.temps1 = temps1;
        this.temps2 = temp2;
        this.composantQuiDoitClignoter = composantQuiDoitClignoter;

        estEnTrainDeClignoter = false;

    }

    public void demarrer() {
        estEnTrainDeClignoter = true;
        start();
    }

    public void arreter() {
        estEnTrainDeClignoter = false;
    }

    public void run() {

        while (estEnTrainDeClignoter) {

            composantQuiDoitClignoter.setBackground(couleur1);
            try {
                sleep(temps1);
            } catch (InterruptedException e) {

            }

            composantQuiDoitClignoter.setBackground(couleur2);
            try {
                sleep(temps2);
            } catch (InterruptedException e) {

            }

        }

    }

}

La classe de test qui instancie le composant et le clignoteur et qui lance le bouzin
<hr size="2" width="100%" />
import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestClignoteur {

    public static void main(String... args) {

        JFrame fenetreTest = new JFrame("Je clignote!");
        fenetreTest.setSize(320, 200);
        fenetreTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panelQuiVaClignoter = new JPanel();

        Clignoteur clignoteur = new Clignoteur(Color.white, Color.black, 1000,
                1000, panelQuiVaClignoter);

        fenetreTest.add(panelQuiVaClignoter);
        fenetreTest.setVisible(true);

        clignoteur.demarrer();

    }

}
0
mimi1255 Messages postés 80 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 15 février 2022
23 avril 2008 à 23:25
je n'arrive pas à faire clignoter mon panel, jai fait ceci pouvez-vous me dire ce qui ne va pas:

Dans mon 1er fichier (un JFrame):
/*
 * Alarme.java
 *
 * Created on 23 avril 2008, 23:14
 */

package Test;

import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 *
 * @author  Jérémy GRESLON
 */
public class Alarme extends javax.swing.JFrame {
    
    /** Creates new form Alarme */
    public Alarme() {
        initComponents();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanelAlarme = new javax.swing.JPanel();
        jButtonAlarme = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        javax.swing.GroupLayout jPanelAlarmeLayout = new javax.swing.GroupLayout(jPanelAlarme);
        jPanelAlarme.setLayout(jPanelAlarmeLayout);
        jPanelAlarmeLayout.setHorizontalGroup(
            jPanelAlarmeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );
        jPanelAlarmeLayout.setVerticalGroup(
            jPanelAlarmeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );

        jButtonAlarme.setText("Intervention sécurité");
        jButtonAlarme.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonAlarmeActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(133, 133, 133)
                        .addComponent(jPanelAlarme, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(121, 121, 121)
                        .addComponent(jButtonAlarme)))
                .addContainerGap(146, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(39, 39, 39)
                .addComponent(jPanelAlarme, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(33, 33, 33)
                .addComponent(jButtonAlarme)
                .addContainerGap(105, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void jButtonAlarmeActionPerformed(java.awt.event.ActionEvent evt) {                                              
        // TODO add your handling code here:
       

        JPanel panelQuiVaClignoter = new JPanel();

        Clignoteur clignoteur = new Clignoteur(Color.white, Color.red, 1000,
                1000, panelQuiVaClignoter);

        jPanelAlarme.add(panelQuiVaClignoter);
        jPanelAlarme.setVisible(true);
      
        clignoteur.demarrer();
        
    }                                             
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Alarme().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButtonAlarme;
    private javax.swing.JPanel jPanelAlarme;
    // End of variables declaration                   
    
}



Dans mon 2ème fichier:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Test;

import java.awt.Color;
import java.awt.Component;

public class Clignoteur extends Thread {

    private Color couleur1, couleur2;
    private long temps1, temps2;
    private Component composantQuiDoitClignoter;

    private boolean estEnTrainDeClignoter;

    public Clignoteur(Color couleur1, Color couleur2, long temps1, long temps2,
            Component composantQuiDoitClignoter) {

        this.couleur1 = couleur1;
        this.couleur2 = couleur2;
        this.temps1 = temps1;
        this.temps2 = temps2;
        this.composantQuiDoitClignoter = composantQuiDoitClignoter;

        estEnTrainDeClignoter = false;

    }

    public void demarrer() {
        estEnTrainDeClignoter = true;
        start();
    }

    public void arreter() {
        estEnTrainDeClignoter = false;
    }

    public void run() {

        while (estEnTrainDeClignoter) {

            composantQuiDoitClignoter.setBackground(couleur1);
            try {
                sleep(temps1);
            } catch (InterruptedException e) {

            }

            composantQuiDoitClignoter.setBackground(couleur2);
            try {
                sleep(temps2);
            } catch (InterruptedException e) {

            }

        }

    }

}



Merci encore
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
24 avril 2008 à 09:10
Oui, c'est simple.

private void jButtonAlarmeActionPerformed(java.awt.event.ActionEvent evt) {                                             
        // TODO add your handling code here:
      

        JPanel panelQuiVaClignoter = new JPanel();

        Clignoteur clignoteur = new Clignoteur(Color.white, Color.red, 1000,
                1000, panelQuiVaClignoter);

        jPanelAlarme.add(panelQuiVaClignoter);
        jPanelAlarme.setVisible(true);
     
        clignoteur.demarrer();
       
}

Si on veux ça fonctionne, tu crées un nouveau panel (panelQuiVaClignoter). Ce panel clignote mais il n'est pas visible à l'écran car il n'est pas dans une fenêtre.
Quel panel veux-tu faire clignoter? Celui qui contient le bouton ou un autre dans une autre fenêtre?
0
mimi1255 Messages postés 80 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 15 février 2022
24 avril 2008 à 20:36
le panel que je veux faire clignoter est le jPanelAlarme.

Merci encore.
0

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

Posez votre question
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
24 avril 2008 à 22:48
Alors si tu veux faire clignoter le panel jPanelAlarme, ça ne sert à rien de créer le panel "panelQuiVaClignoter".

Ecris simplement :
<hr size="2" width="100%" />
private void jButtonAlarmeActionPerformed(java.awt.event.ActionEvent evt) {                                             
  
     Clignoteur clignoteur = new Clignoteur(Color.white, Color.red, 1000,
                1000, jPanelAlarme);
    
        clignoteur.demarrer();
       
}
0
mimi1255 Messages postés 80 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 15 février 2022
5 mai 2008 à 20:24
Bonjour, je fais appel à la classe Clignoteur depuis mon IHM comme ceci:
private void jButtonDemarrerAlarmeActionPerformed(java.awt.event.ActionEvent evt) {                                             
  
     Clignoteur clignoteur = new Clignoteur(Color.white, Color.red, 1000,
                1000, jPanelAlarme);
    
        clignoteur.demarrer();
       
}

et j'ai un autre bouton pour l'arrêter où je fais ceci:
private void jButtonStopAlarmeActionPerformed(java.awt.event.ActionEvent evt) {                                             
  
     Clignoteur clignoteur = new Clignoteur(Color.white, Color.red, 1000,
                1000, jPanelAlarme);
    
        clignoteur.stop();       
}

Mais il ne s'arrête pas de clignoter, comment faire?

Merci encore.
0
cs_papillon2000 Messages postés 94 Date d'inscription dimanche 30 avril 2006 Statut Membre Dernière intervention 21 juin 2010
23 févr. 2009 à 19:25
bonsoir les amis,je veux récupére le temps linéraire pour simuler le comportement d'un ensebmle de taches , pour pouvoir comparer le début d'une tache et la fin par raposrt à une autre tache.
0