Passage de variable

Bison_Ravi_33 Messages postés 55 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 20 septembre 2004 - 28 juil. 2004 à 23:34
Bison_Ravi_33 Messages postés 55 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 20 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 ?

merci pour vos réponses...
;)

27 réponses

wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
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);
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
29 juil. 2004 à 10:58
GodConan :clown)

Mais il me semble que la norme des BEAN oblige l utilisation des methode get() et set() .... ;o) donc pas le choix.... ;o)
++
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
29 juil. 2004 à 11:06
une norme c'est fait pour etre detournée :))
0
Bison_Ravi_33 Messages postés 55 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 20 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() ?
0

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

Posez votre question
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
29 juil. 2004 à 12:09
oui mais A est une classe et a moins d'avoir t static, il faut que tu appelle get_t sur une instance

la norme des bean si que si t'as une variable t le get/set s'ecrit

getT()
setT(...)

variable maVariable : getMaVariable setMaVariable
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
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)

++
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
29 juil. 2004 à 17:10
GodConan :clown)

a vi au fait (pour wargre) une norme c est justement fait pour etre respecté ... Autrement ca s appelle de prog a la MS ...

++
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
30 juil. 2004 à 08:51
:))
0
Bison_Ravi_33 Messages postés 55 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 20 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...)
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
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 ...
++
0
Bison_Ravi_33 Messages postés 55 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 20 septembre 2004
2 août 2004 à 10:49
désolé, :sad)
je pensais avoir été clair...
0
Bison_Ravi_33 Messages postés 55 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 20 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.

voila le source...
/************************ Wahou ! ************************/
import java.io.Serializable;
import java.beans.*;

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...
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
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)
++
0
Bison_Ravi_33 Messages postés 55 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 20 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.

j'ai du faire une boulette quelque part :sad)

@+
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
5 août 2004 à 08:18
GodConan :clown)

si tu fait ce code :
changeSupport.firePropertyChange("valeur", oldValeur,valeur);

2 foix de suite ds la meme methode cela me semble normale ;o)
Je pense que usage de la meme clé ecrase la premiere "valeur" changé.

dc essaye de passer soit par 2 setvalue, soit par 2 clé diferente ..

++
0
Bison_Ravi_33 Messages postés 55 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 20 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;
}


mais ça marche pas... une suggestion ???
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
12 août 2004 à 19:32
GodConan :clown)

public synchronized void setCoord (float[] yop) {
this.coord[i] = coord;
}

T es sur de ta methode la ??!!!!

car le parametre yop ne te ser a rien ds ce cas preci ..

public synchronized void setCoord (float yop) {
this.coord[i] = yop;
}

c pas plutot ca que tu voudrai ??????

++
0
Bison_Ravi_33 Messages postés 55 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 20 septembre 2004
13 août 2004 à 10:33
et ben non, ca marche pas... :sad)

voila le début de mon bean:

private float [ ] coord = new float [3];
    private PropertyChangeSupport changes = new PropertyChangeSupport(this);

public myBean() {
    float [ ] coord = {1, 2, 3};  //initialisation 
}


puis il me faut deux méthodes : get et set...

j'avais tout d'abord pensé à :

public void setCoord ( float [ ] newCoord ) {
    float [ ] oldCoord = coord;
    coord = newCoord;
    changes.firePropertyChange("Coord",oldCoord, newCoord);
}
public float getCoord(int i) {
    return coord [i] ;
}

mais ça ne me retourne aucune propriété... rien...

en ce qui concerne ta proposition:
public synchronized void setCoord(float newCoord ) {
    this.coord[i] = newCoord;
}

il y a un problème lors de la compilation puisqu'il ne reconnait pas la variable "i".
meme si je passe "i" en variable globale ca ne change rien...

alors je me suis dis qu'il faudrait peut-etre une boucle for...
public synchronized void setCoord(double newCoord[]) {
for (int i =0;i<3;i++) {
this.coord[i] = newCoord[i] ;
changes.firePropertyChange("coord",new Double(coord[i]),new Double(newCoord[i]));
}
}


mais toujours rien, aucune propriété ...

public synchronized void setCoord(double newCoord[]) {
double oldCoord[] = new double[3];
    for (int i =0;i<3;i++) {
        this.coord[i] = newCoord[i] ;
        oldCoord[i] = coord[i];
        coord[i] = newCoord[i];
        changes.firePropertyChange("coord",new Double(coord[i]),new Double(newCoord[i]));
    }
}
public double getCoord(int i) {
    return coord[i];
}

toujours rien...

une autre idée ???
ou la solution peut-etre ?.... ce serait sympa :)
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
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 ....
0
Bison_Ravi_33 Messages postés 55 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 20 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...

merci
:)
0
Rejoignez-nous