Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[HELP] final et inner class

5 réponses
Avatar
yvon.thoravalNO-SPAM
J'ai un problème pour ajouter un Listener à un bouton, l'event handler
de ce bouton ajoutant lui-même un bouton identique avec le même
listener, je ne sais comment me sortire de ce tracas...

le code, schématiquement (c'est du swt) :

final Group c2 = new Group(dialog, SWT.NULL);
[...]
final Button add = new Button(c2, SWT.PUSH);
add.setText("+");
final Listener addListener = new Listener() {
public void handleEvent(Event e) {
[...]
final Button add = new Button(c2, SWT.PUSH);
add.setText("+");
add.addListener(SWT.Selection, addListener);
[...]
}
};
add.addListener(SWT.Selection, addListener);

Eclipse me dit que la variable locale "addListener" peut ne pas avoir
été initialisée (quel toupet))) !

Je ne peux pas redéfinir "addListener" dans cette sous-classe because of
récursivité.

Comment puis-je me sortir de là ?

--
yt

5 réponses

Avatar
JScoobyCed
Yvon Thoraval wrote:
<tentative>

private Button objTempButton = null;

private void setTempButton(Button objButtonP) {
objTempButton = objButtonP;
}

final Group c2 = new Group(dialog, SWT.NULL);
[...]
final Button add = new Button(c2, SWT.PUSH);
add.setText("+");

final Listener addListener = new Listener() {
public void handleEvent(Event e) {
[...]
final Button add = new Button(c2, SWT.PUSH);
add.setText("+");


setTempButton(add);

[...]
}
};


objTempButton.addListener(SWT.Selection,addListener);

add.addListener(SWT.Selection, addListener);


</tentative>

En cas de plusieurs Buttons, utiliser un tableau.

Cedric

Avatar
yvon.thoravalNO-SPAM
JScoobyCed wrote:


En cas de plusieurs Buttons, utiliser un tableau.


oui, merci, il faut aabsolument que je limite le nombre possible de
boutons...


--
yt

Avatar
Sébastien
Yvon Thoraval wrote:
J'ai un problème pour ajouter un Listener à un bouton, l'event handler
de ce bouton ajoutant lui-même un bouton identique avec le même
listener, je ne sais comment me sortire de ce tracas...

le code, schématiquement (c'est du swt) :

final Group c2 = new Group(dialog, SWT.NULL);
[...]
final Button add = new Button(c2, SWT.PUSH);
add.setText("+");
final Listener addListener = new Listener() {
public void handleEvent(Event e) {
[...]
final Button add = new Button(c2, SWT.PUSH);
add.setText("+");
add.addListener(SWT.Selection, addListener);


remplace addListener par 'this', ça devrait marcher.

pourquoi utilises-tu tout ces 'final' ?

Seb

Avatar
yvon.thoravalNO-SPAM
Sébastien wrote:


remplace addListener par 'this', ça devrait marcher.
ah ok, merci beaucoup !

entre-temps je suis passé à une solution où je n'ajoute + de button +,
mais c'est moins élégant, on ne peut guère, après coup, que supprimer
les derniers trucs entrés...
pourquoi utilises-tu tout ces 'final' ?
Ben le final Group c2 est nécessaire ?

Les autres résultent d'un "bête" copier coller de ce qu'il y a + haut
)))

Je dois dire que justement ce matin j'ai cherché sur le net un tuto
expliquant, clairement si poss, à quoi sert ce final et quand
l'utiliser, mais je n'ai pas, encore, trouvé qqc de suffisamment
éclairant pour ma comprenotte...

--
yt

Avatar
yvon.thoravalNO-SPAM
Sébastien wrote:

remplace addListener par 'this', ça devrait marcher.


OK, merci encore, ça ma permis de passer de ce design :
<http://cjoint.com/data/lzphvJJ7gx.htm>

à celui-ci :
<http://cjoint.com/data/lzpim0r7i6.htm>

reste à peaufiner les Combos un peu étriquées...

--
yt