Bison_Ravi_33
Messages postés55Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention20 septembre 2004
-
28 juil. 2004 à 23:34
Bison_Ravi_33
Messages postés55Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention20 septembre 2004
-
26 août 2004 à 00:21
salut tout le monde.
J'ai dans l'idée de créer deux Bean, que nous appelerons A et B.
Le Bean A est constitué de trois boutons JButton (avant, stop et init), d'une JLabel et d'un champ de texte JTextField. Dans le champ de texte je rentre un pas de temps (int pas). Le JLabel affiche la variable t, initialisée à zéro.
Lorsque j'appuie sur le boutton init, la valeur de t redevient zéro et le JLabel l'affiiche.
Lorsque j'appuie sur le bouton avant, la valeur de t est incrémentée toutes les demi secondes de la valeur du pas de temps.
exemple avec un pas = 12.
temps réel : 0 s --> t = 0
0,5 s --> t = 12
1,0 s --> t = 24 ... et ainsi de suite.
Pour cela, j'ai utilisé un code tout simple (largement inspiré de Draven et de son chronomètre -- Merci --) j'ai créé ma classe sans problème. Puis j'ai essayé de la transformer en Bean,
import java.lang.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.event.*;
import java.lang.Object;
import java.io.Serializable; // Serialisation
import java.beans.*;
public class H6 extends Object implements Serializable {
// ---- déclaration des variables
private static int t =0;
// ---- Le timer actualise l'affichage toutes les 0,5 secondes
private static int delay=500;
// ---- la seule variable utile pour lors de la conenxion à d'autres bean
// ---- est le temps t, c'est donc la seule variable qu'on associe à un GET
// ---- afin qu'elle soit accessible par d'autres classes
public int get_t() {
return t;
}
public static void main(String[] args) {
// ---- déclaration des évènements
ActionListener tache_timer_avant;
// ------------------------ CREATION DES COMPOSANTS ------------------
// ----------- déclaration des boutons
JButton avant = new JButton("avant");
JButton stop = new JButton("STOP");
JButton init = new JButton("Remise à zéro");
// ----------- déclaration des Labels
final JLabel temps = new JLabel("temps");
JLabel pasdetemps_Label = new JLabel("pas de temps");
// ----------- déclaration des zones de texte
final JTextField pasdetemps = new JTextField(4);
// ----------- déclaration des zones de mise en page
JPanel Panel1 = new JPanel();
JPanel Panel2 = new JPanel();
JFrame fenetre = new JFrame("Timer");
// ---- Action réalisé par le timer AVANT
tache_timer_avant= new ActionListener() {
public void actionPerformed(ActionEvent e) {
int pdt = (int)(Double.parseDouble(pasdetemps.getText()));
t=t+pdt;
temps.setText("temps : "+t);
}
};
// ---- instanciation du timer
final Timer timer_avant= new Timer(delay,tache_timer_avant);
// ---- Ajout des composants aux conteneurs avec formatage
Panel1.add(temps);
Panel2.add(pasdetemps_Label);
Panel2.add(pasdetemps);
Panel2.add(init);
Panel2.add(stop);
Panel2.add(avant);
Panel1.setBorder(new EmptyBorder(10,135,10,10));
fenetre.getContentPane().add(Panel1,"South");
fenetre.getContentPane().add(Panel2,"North");
// ---- Action provoqué par l'utilisateur lors du clic sur le bouton AVANT
avant.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e_av) {
timer_avant.start();
}
});
// ---- Action provoqué par l'utilisateur lors du clic sur le bouton init
init.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
t = 0;
temps.setText("temps : "+t);
timer_avant.stop();
}
});
// ---- Action provoqué par l'utilisateur lors du clic sur le bouton STOP
stop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
timer_avant.stop();
timer_arriere.stop();
}
});
// ---- Afficher l'ihm
JFrame.setDefaultLookAndFeelDecorated(false);
fenetre.pack();
fenetre.setLocation(350,150); // Déplacer la fenetre à ce nouvel emplacement
fenetre.setSize(600,150); // dimension de la fenetre
fenetre.show();
}
}
Le second Bean (B) a pour but d'afficher la variable t.
Le bean A n'a pas besoin d'avoir de propriété : on ne doit pas le configurer dans le BDK, le pas de temps doit etre entrer une fois l'association avec d'autres bean et la
sauvegarde sous forme d'Applet effectuée, ceci pour ne pas avoir à recompiler à chaque fois qu'on veut modifier le pas de temps.
Finalemen, je dois donc relier les Bean A et B entre eux.
j'en arrive aux questions:
* est-il possible de ne transférer d'un bean à l'autre qu'une variable et non une méthode ?
* que dois-je écrire dans mon bean B pour qu'il affiche la valeur de la variable t ?
ou, du moins, pour que transférer la valeur de la variable t à un autre bean... quelles doivent etre les méthodes ?
wargre
Messages postés649Date d'inscriptionmardi 8 juin 2004StatutMembreDernière intervention 9 septembre 20047 29 juil. 2004 à 08:49
tu peus mettre une variable en public mais c'est plutot deconseille
il faut mieux recuperer et placer la valeur de t par les methodes getT()/setT(int) de A
si tu met t en public, d'une instance de bean A, tu utilise t par a.t
avec set/get : a.setT(x); a.getT(x);
Bison_Ravi_33
Messages postés55Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention20 septembre 2004 29 juil. 2004 à 11:18
j'y ai pensé à cette norme, d'ailleurs, y'a une methode get() qui, je le pensais, devait permettre d'accéder à cette varaible t puis que la methode get_t() retourne t.
donc, dans mon second bean je dois appeler la variable t par la methode A.get_t() ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 29 juil. 2004 à 17:08
GodConan :clown)
alala tous ce blabla pour rien... ;o) ...
de toute facon ta pas a t inquieter ;o) tu met toute tes vartiables en private ou protected ;o) comme ca tu sera obliger d utiliser les methode get et set ;o) qui seront generer automatiquement en quelque clik avec un IDE qui se respecte ;o) Eclipse par exemple... ;o)
Bison_Ravi_33
Messages postés55Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention20 septembre 2004 1 août 2004 à 16:37
tout ce blable n'est pas là pour rien... :sad)
parceque ca marche pas...
dans le premier bean j'ai mis une méthode get_t pour "exporter" la variable t...
dans le second bean j'ai mis une méthode set_t pour "importer" la variable t...
bon tout le monde suit ??? <rire>
je les transforme en JAR que je Load.
mais quand je les utilise dans le BDK je n'ai acces à aucun des evenements correspondant aux méthodes get_t et/ou set_t.
Mon but n'est pas de faire des appels de méthodes mais bel et bien des appels d'évènements...
Alors pourquoi que ça marche pas ?? :(
(cette construction grammaticale n'est pas conforme aux règles édictées par la langue française mais bon, c'est pas très grave...)
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 1 août 2004 à 17:10
GodConan :clown)
;o) bon ben je vai etre severe ... ;o) . Le mieu c est donc d apprendre a te servir des Listeners ... ;o) et diable la methode doit se nommer getT() et non pas get_t() grrrrr... ;o)
Pour resumer je pense que tu n expose pas bien ton besoin... ;o) et la il est tres dificile d extrapoler ...
++
Bison_Ravi_33
Messages postés55Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention20 septembre 2004 4 août 2004 à 13:26
ça y 'est !!!
wouhou ! j'ai réussi...
oui, oui, c'est une petite victoire pour l'Humanité mais un grand pas pour Moa :)
donc oui, je suis fier de vous faire part de ma réussite. J'ai enfin réussi à créer un Bean dont le but est de transmettre la valeur, que l'utilisateur a rentré, à tout autre bean qui lui est lié.
Certains vont dire que c'est là une utilisation inutile des Beans... à ceux-là je leur répond :"et alors ??"
Bon voila, je suis fier de moi et j'aimerais remercier ma famille et mes amis qui ont toujours cru en moi et m'ont soutenu pendant les périodes de doute.
public class Prof implements Serializable {
protected int valeur;
PropertyChangeSupport changeSupport;
public Prof(){
valeur = 0;
changeSupport = new PropertyChangeSupport(this);
}
public synchronized void setValeur(int val) {
int oldValeur = valeur;
valeur = val;
changeSupport.firePropertyChange("valeur",oldValeur,valeur);
}
public synchronized int getValeur() {
return valeur;
}
public synchronized void addPropertyChangeListener(PropertyChangeListener listener) {
changeSupport.addPropertyChangeListener(listener);
}
public synchronized void removePropertyChangeListener(PropertyChangeListener listener) {
changeSupport.removePropertyChangeListener(listener);
}
}
Par contre, j'ai encore un problème, j'arrive pas à faire passer des variables Booléennes...
que l'utilisateur rentre par exemple true et que cette valeure booléenne soit transmise à un autre bean, quelque chose comme:
public synchronized void setValeur(boolean val) {
boolean oldValeur = valeur;
valeur = val;
changeSupport.firePropertyChange("valeur", new Boolean(oldValeur),new Boolean(valeur));
}
mais ça marche pas...
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 4 août 2004 à 14:47
GodConan :clown)
il me semble que la methode peut etre utiliser directement avec des valeur boolean dc comme ca :
firePropertyChange("valeur", oldValeur,valeur);
avec oldValeur,valeur en boolean :o)
++
Bison_Ravi_33
Messages postés55Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention20 septembre 2004 4 août 2004 à 16:11
tu as raison GodConan :clown)
la méthode fonctionne correctement.
Maintenant, mon problème résulte dans le fait de pouvoir passer deux paramètres d'un bean à l'autre, par exemple un double et un boolean.
Pour l'instant, je n'arrive qu'à modifier mes propriétés dans le premier des Bean, mais seulement 1 paramètre est transféré, et je ne sais pas pourquoi.
Bison_Ravi_33
Messages postés55Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention20 septembre 2004 10 août 2004 à 23:42
désolé pour le retard...
bon j'ai essayé et ça marche effectivement...
Je devais pas avoir tous les neurones connectés ce jour-là car, même si j'ai mis deux clés différentes c'était dans deux méthodes différentes... bah oui, y'a des jours comme ça...
sinon, mes beans fonctionnent correctement.
le problèùme (ben y'a toujours un probleme) c'est pour transférer des propriétés indexées.
private float[] coord = new float[3];
public float getCoord (int i) {
return coord[i];
}
public synchronized void setCoord (float[] yop) {
this.coord[i] = coord;
}
cs_GodConan
Messages postés2113Date d'inscriptionsamedi 8 novembre 2003StatutContributeurDernière intervention 6 octobre 201212 13 août 2004 à 15:45
GodConan :clown)
i faut le passer en param vi g oublier ;o) me suis contenter d un copier coler ;o) comme dab quoi ;o) sorry...
il vaut mieu faire ton setcoord elemnt par element ... si tu veu que les fire soit bien executer ... enfin autrement tu peu gerer
un fire qui conserne le tableau ....
Bison_Ravi_33
Messages postés55Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention20 septembre 2004 16 août 2004 à 00:30
j'ai bien pensé à passer paramètre par paramètre....
Mais mon application va, à terme, concerner des composants ayant chacun 6 paramètres !
Donc imagine, 6 paramètres par composant... au minimum 4 composants... ca fait beaucoup de connections...
Alors pour simplifier, je voulais faire passer des tableaux de paramètres... mais ça ne fonctionne pas. :sad)
enfin, le code que j'ai mis précédemment ne fonctionne pas et je ne sais pas pourquoi...