IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Problème de JButton


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 89
    Par défaut Problème de JButton
    Voilà, il s'agit d'un système de commande de pompe. Pour pouvoir utiliser les pompes, je doit prendre la main sur le système en cliquant sur le bouton PriseEnMain. Pour libérer la main sur le système, je reclique une deuxième fois sur le bouton.Le problème, c'est que le bouton ne marche qu'une fois et il refuse de libérer la main, voici le code :

    EtatPriseDistance.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
    import java.beans.*;
    import javax.swing.*;
     
    import com.schneiderautomation.factorycast.*;
    import com.schneiderautomation.factorycast.comm.StatusMessages;
     
    public class EtatPriseDistance implements PropertyChangeListener
    {
    	//Déclaration des variables
    	short qty=1;
    	boolean Clic;
    	boolean[] valeur4=new boolean[1];
    	JLabel EtatPrise=new JLabel();
     
    	//on crée le bouton de prise en main pour pouvoir les modifier  en fonction de l'état de la prise en main
    	JButton BoutonPriseMain=new JButton();
     
     
    	public void init(CommBean comm)
    	{
    		try
    		{
    			//Création d'un objet qui permet de lire les variables de manière continuelle
    			MonitorBool monitor4=new MonitorBool(comm.getAdaptor());
     
    			//Création d'un objet qui permet de lire les variables lors de l'initialisation
    			GetBool getter4=new GetBool(comm.getServer());
     
    			//Initialisatiion du groupe de variable pour l'objet getter
    			getter4.setAddress("%M27");
    			getter4.setQuantity(qty);
    			getter4.readValues();
     
    			//On récupère les valeur pour l'objet getter
    			valeur4=getter4.getValues();
     
    			//On édite les labels
    			setJLabel();
     
    			//Mise en écoute des évènements des variables
    			monitor4.addPropertyChangeListener(this);
     
    			//Initialisation du groupe de variables
    			monitor4.setAddress("%M27");
    			monitor4.setQuantity(qty);
    			monitor4.register();
    		}
    		catch(Exception e)
    		{
    			System.out.println("Erreur : "+e.getMessage());
    		}
    	}
     
    	public void propertyChange(PropertyChangeEvent evt)
    	{
    		//Renvoi le nom de la propriété qui a été changé
    		String prop4=evt.getPropertyName();
     
    		if (prop4.equals("values"))
    		{
    			//On récupère les nouvelles valeurs
    			valeur4=(boolean[])evt.getNewValue();
     
    			//On édite les labels
    			setJLabel();
    		}
    	}
     
    	public void setJLabel()
    	{
    		//Si le système est pris en main et que l'utilisateur n'a pas cliqué sur le bouton de prise en main alors le système est déjà pris en main par quelqu'un d'autre...
    		if((Clic==false)&&(valeur4[0]==true))
    		{
    			EtatPrise.setText("<html><font color=#CC0000 size=6>Un utilisateur a d&eacute;j&agrave; pris la main</font></html>");
    			BoutonPriseMain.setText("<html>Prise en main<br>indisponible</html>");
    			BoutonPriseMain.setEnabled(false);
    		}
    		else
    		{
    			BoutonPriseMain.setEnabled(true);
    			//...sinon si le système est pris en main et que l'utilisateur a cliqué sur le bouton alors l'utilisateur a pris la main sinon personne n'a pris la main sur le système
    			if(valeur4[0]==true)
    			{
    				EtatPrise.setText("<html><font size=6 color=#228B22>Syst&egrave;me pris en main</font></html>");
    				BoutonPriseMain.setText("<html>D&eacute;sactiver<br>Prise en main</html>");
     
    			}
    			else
    			{
    				EtatPrise.setText("<html><font color=#CC0000 size=6>Syst&egrave;me non pris en main</font></html>");
    				BoutonPriseMain.setText("<html>Activer<br>Prise en main</html>");
    			}
    		}
    	}
     
    	public boolean getValeur()
    	{
    		boolean val=valeur4[0];
    		return val;
    	}
     
    	public void setValClic(boolean val)
    	{
    		Clic=val;
    	}
     
    }
    PriseDistance.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
     
    import java.awt.event.*;
    import javax.swing.*;
     
    import com.schneiderautomation.factorycast.*;
    import com.schneiderautomation.factorycast.comm.StatusMessages;
     
    public class PriseDistance implements ActionListener
    {
    	SetBool setter1;
    	boolean[] set=new boolean[1];
    	ComPompe commandepompe;
    	EtatPriseDistance etatprisedist=new EtatPriseDistance();
    	boolean clic=false;
     
    	public void init(CommBean comm)
    	{
    		etatprisedist.setValClic(clic);
     
    		etatprisedist.init(comm);
    		//Création d'un objet permettant d'écrire une valeur de variable
    		setter1=new SetBool(comm.getServer());
     
    		//Permet de spécifier que la commande que le bouton génère sera pris en compte par l'applet
    		etatprisedist.BoutonPriseMain.addActionListener(this);
     
    	}
     
    	//méthode lancé lors d'un clic sur l'un des bouton
    	public void actionPerformed(ActionEvent evt)
    	{
    		//Le clic est à true si on a pris la main sur le système
    		if(clic==false)
    			clic=true;
    		else
    			clic=false;
     
    		setter1.setAddress("%M27");
     
    		if((etatprisedist.getValeur()==false))
    		{
    			setter1.setValue(true);
    		}
    		else
    		{
    			setter1.setValue(false);
    			commandepompe.DesactivPomp();
    		}
     
    		//on envoi la valeur
    		try
    		{
    			setter1.sendValues();
    		}
    		catch(Exception e)
    		{
    			System.out.println("Erreur :"+e.getMessage());
    		}
     
    		etatprisedist.setValClic(clic);
    	}
     
    	//Cette méthode est utilisé lors de la destruction de l'applet
    	public void destruction()
    	{
    		commandepompe.DesactivPomp();
    		setter1.setValue(false);
     
    		try
    		{
    			setter1.sendValues();
    		}
    		catch(Exception e)
    		{
    			System.out.println("Erreur :"+e.getMessage());
    		}
    	}
     
     
    }
    hydraulique.java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
     
    import javax.swing.*;
    import java.awt.*;
    import java.util.*;
     
    import com.schneiderautomation.factorycast.*;
    import com.schneiderautomation.factorycast.comm.StatusMessages;
     
    public class hydraulique extends JApplet
    {
     
    	//Création d'un objet permettant la communication avec l'automate
    	CommBean comm=new CommBean(Locale.getDefault());
     
    	//Création des objets des autres classes
    	ComPompe commandepompe=new ComPompe();
    	PriseDistance priseDist=new PriseDistance();
     
     
    	//Création du panneau et des labels titres
    	JPanel panneau=new JPanel();
    	JLabel titre1=new JLabel("<html><u>Pompe 1:</u></html>");
    	JLabel titre2=new JLabel("<html><u>Pompe 2:</u></html>");
    	JLabel titre3=new JLabel("<html><u>Pompe 3:</u></html>");
     
    	public void init()
    	{
    		try
    		{
    			String IPServeur=getCodeBase().getHost();
    			comm.connect(IPServeur,false);
    			comm.start();
     
    			commandepompe.init(comm);
    			priseDist.init(comm);
     
    			//insertion du panneau dans l'applet et création d'un objet GridBagConstraints pour le positionnement des éléments
    			this.add(panneau);
    			panneau.setBackground(Color.WHITE);
    			panneau.setLayout( new GridBagLayout());
    			GridBagConstraints contraintes = new GridBagConstraints();
     
    			//insertion des labels titre
    			contraintes.gridx=0;
    			contraintes.gridy=0;
    			contraintes.insets=new Insets(0,0,0,0);
    			panneau.add(titre1,contraintes);
     
    			contraintes.gridx=1;
    			contraintes.gridy=0;
    			contraintes.insets=new Insets(0,40,0,0);
    			panneau.add(titre2,contraintes);
     
    			contraintes.gridx=2;
    			contraintes.gridy=0;
    			contraintes.insets=new Insets(0,40,0,0);
    			panneau.add(titre3,contraintes);
     
    			//insertion des images représentant l'état des pompes
    			contraintes.gridx=0;
    			contraintes.gridy=1;
    			contraintes.insets=new Insets(40,0,0,0);
    			panneau.add(commandepompe.pompe.PompeActive[0],contraintes);
     
    			contraintes.gridx=0;
    			contraintes.gridy=1;
    			contraintes.insets=new Insets(40,0,0,0);
    			panneau.add(commandepompe.pompe.PompeInactive[0],contraintes);
     
    			contraintes.gridx=1;
    			contraintes.gridy=1;
    			contraintes.insets=new Insets(40,40,0,0);
    			panneau.add(commandepompe.pompe.PompeActive[1],contraintes);
     
    			contraintes.gridx=1;
    			contraintes.gridy=1;
    			contraintes.insets=new Insets(40,40,0,0);
    			panneau.add(commandepompe.pompe.PompeInactive[1],contraintes);
     
    			contraintes.gridx=2;
    			contraintes.gridy=1;
    			contraintes.insets=new Insets(40,40,0,0);
    			panneau.add(commandepompe.pompe.PompeActive[2],contraintes);
     
    			contraintes.gridx=2;
    			contraintes.gridy=1;
    			contraintes.insets=new Insets(40,40,0,0);
    			panneau.add(commandepompe.pompe.PompeInactive[2],contraintes);
     
    			//insertion de l'état des pompes
    			contraintes.gridx=0;
    			contraintes.gridy=2;
    			contraintes.insets=new Insets(40,0,0,0);
    			panneau.add(commandepompe.pompe.EtatPomp[0],contraintes);
     
    			contraintes.gridx=1;
    			contraintes.gridy=2;
    			contraintes.insets=new Insets(40,40,0,0);
    			panneau.add(commandepompe.pompe.EtatPomp[1],contraintes);
     
    			contraintes.gridx=2;
    			contraintes.gridy=2;
    			contraintes.insets=new Insets(40,40,0,0);
    			panneau.add(commandepompe.pompe.EtatPomp[2],contraintes);
     
    			//Insertion de la commande des pompes
    			contraintes.gridx=0;
    			contraintes.gridy=3;
    			contraintes.insets=new Insets(40,0,0,0);
    			panneau.add(commandepompe.pompe.ComPomp[0],contraintes);
     
    			contraintes.gridx=1;
    			contraintes.gridy=3;
    			contraintes.insets=new Insets(40,40,0,0);
    			panneau.add(commandepompe.pompe.ComPomp[1],contraintes);
     
    			contraintes.gridx=2;
    			contraintes.gridy=3;
    			contraintes.insets=new Insets(40,40,0,0);
    			panneau.add(commandepompe.pompe.ComPomp[2],contraintes);
     
    			//Insertion du label de l'état de prise à distance
    			contraintes.gridx=0;
    			contraintes.gridy=4;
    			contraintes.gridwidth=3;
    			contraintes.insets=new Insets(40,0,0,0);
    			panneau.add(priseDist.etatprisedist.EtatPrise,contraintes);
     
    			//Insertion du bouton de prise à distance
    			contraintes.gridx=0;
    			contraintes.gridy=5;
    			contraintes.gridwidth=3;
    			contraintes.insets=new Insets(40,0,0,0);
    			panneau.add(priseDist.etatprisedist.BoutonPriseMain,contraintes);
     
     
    		}
    		catch(Exception e)
    		{
    			System.out.println("Erreur : "+e.getMessage());
    		}
    	}
     
    	public void destroy()
    	{
    		try
    		{
    			comm.disconnect();
    		}
    		catch(Exception e)
    		{
    			System.out.println("Erreur : "+e.getMessage());
    		}
    	}
     
    }
    Ceci n'est qu'une partie du code, il y a d'autre fichier qui fonctionne très bien. C'est juste cette histoire de prise en main que j'arrive pas à faire fonctionner. MErci d'avance pour la réponse. A Bientôt.

  2. #2
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 90
    Par défaut
    Si je comprends bien, pour ton problemes tu seras oblige d'utiliser deux JButton type(On Off)
    ciao.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 89
    Par défaut
    Ok, bon ça ne posera pas problème de le faire, mais le truc c'est que ça fonctionnait à l'époque quand j'utilisais une classe mère (l'applet) contenant des sous classes. Je donnerais ma conclusion à ce problème demain car je n'ai pas accès à l'automate de chez moi. A bientôt.

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Tou vient du fait que tu essaie de faire des actions lourdes dans l'EDT.

    Cf le tuto suivant: http://gfx.developpez.com/tutoriel/j...ing-threading/

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 89
    Par défaut
    ok, bon je vais lire la doc mais je pense alléger mon code en enlevant la désactivation des pompes lors de la libération de la main et j'essayerais de m'arranger avec l'EtatPriseDistance. Merci Beaucoup.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 89
    Par défaut
    C'est bien la désactivation des pompes qui faisait merder mon applet. L'applet n'aime pas que je fasse plusieurs écriture simultanée. Merci Beaucoup pour vos réponse. A Bientôt.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec JButton
    Par maju93160 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 14/04/2013, 14h19
  2. Problème du JButton affiché invisible...
    Par Ghunter59 dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 17/11/2007, 19h53
  3. Swing : problème avec un Jbutton
    Par Gilouou dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 05/11/2006, 00h37
  4. Problème avec JButton
    Par bressan dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 20/06/2006, 13h01
  5. Problème gestion actionListener pour JButton
    Par cedricbr dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 26/05/2006, 16h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo