Clignotement de 2 couleurs dans un panel

Signaler
Messages postés
77
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
19 septembre 2020
-
Messages postés
94
Date d'inscription
dimanche 30 avril 2006
Statut
Membre
Dernière intervention
21 juin 2010
-
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

Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
25
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();

    }

}
Messages postés
77
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
19 septembre 2020

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
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
25
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?
Messages postés
77
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
19 septembre 2020

le panel que je veux faire clignoter est le jPanelAlarme.

Merci encore.
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
25
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();
       
}
Messages postés
77
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
19 septembre 2020

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.
Messages postés
94
Date d'inscription
dimanche 30 avril 2006
Statut
Membre
Dernière intervention
21 juin 2010

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.