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
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
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éjà 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ème pris en main</font></html>"); BoutonPriseMain.setText("<html>Désactiver<br>Prise en main</html>"); } else { EtatPrise.setText("<html><font color=#CC0000 size=6>Systè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; } }
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 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()); } } }
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.
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()); } } }
Partager