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

[Debutant] Comment gérer les événements dans un de mes objets persos ?

2 réponses
Avatar
ceb
Bonjour,

Ca fait 2 semaines que j'ai commencé à travailler sous Eclipse.
J'utilise SWT et voici ce que je fais :

public class MonLabel extends Composite {
(...)
}

Mon label fonctionne très bien, le message Paint est géré parfaitement
et tout va pour le mieux.

Maintenant, j'ai besoin de créer un bouton cliquable au look de mon
label. Pour ce qui est du look et du fontionnement tout est OK, sauf
deux trucs :

1. Quand je clique sur mon bouton je veux pouvoir récupérer les
événements avec un listener dans mon shell, mais hélas mon contrôle ne
répond pas ! est-il possible d'implémenter un sendEvent ou quelque chose
du genre ?

2. Je souhaiterais faire de mon bouton un objet "focusable" et là, j'ai
beau renvoyer true dans la foncion "isFocus()" il ne se passe rien, ni
la touche TAB, ni la souris ne me donnent un semblant de focus. J'ai
essayé de tracer ça dans les listeners mais il ne se passe rien. Comment
la fenêtre fait pour savoir si un contrôle est focusable ou pas ?

Merci de m'avoir lu jusqu'ici.


-= CEB =-

2 réponses

Avatar
Simon OUALID
Regarde les classes/interfaces ActionListener, FocusAdapter et
FocusListener... Ca devrait resoudre ton problème !

Exemple simpliste (pas d'IDE sous la main mais ca devrait compiler a
l'erreur de syntaxe prêt ... ;)) :

JTextField tf = new JTextField("Un champ texte");
JButton b = new JButton("Un bouton");

b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("bouton pressé");
}
});

tf.addFocusListener(new FocusAdapter() {
public void focusGained(FocusEvent e) {
System.out.println("focus pris !");
}
public void focusLost(FocusEvent e) {
System.out.println("focus perdu !");
}
});

A+

Symon

ceb wrote:
Bonjour,

Ca fait 2 semaines que j'ai commencé à travailler sous Eclipse.
J'utilise SWT et voici ce que je fais :

public class MonLabel extends Composite {
(...)
}

Mon label fonctionne très bien, le message Paint est géré parfaitement
et tout va pour le mieux.

Maintenant, j'ai besoin de créer un bouton cliquable au look de mon
label. Pour ce qui est du look et du fontionnement tout est OK, sauf
deux trucs :

1. Quand je clique sur mon bouton je veux pouvoir récupérer les
événements avec un listener dans mon shell, mais hélas mon contrôle ne
répond pas ! est-il possible d'implémenter un sendEvent ou quelque chose
du genre ?

2. Je souhaiterais faire de mon bouton un objet "focusable" et là, j'ai
beau renvoyer true dans la foncion "isFocus()" il ne se passe rien, ni
la touche TAB, ni la souris ne me donnent un semblant de focus. J'ai
essayé de tracer ça dans les listeners mais il ne se passe rien. Comment
la fenêtre fait pour savoir si un contrôle est focusable ou pas ?

Merci de m'avoir lu jusqu'ici.


-= CEB =-



Avatar
ceb
Merci pour ta réponse, mais mon problème est autre. Je vais essayer de
mieux exprimer mon désespoir :-)

Quand tu écris :

JButton b = new JButton("Un bouton");

b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("bouton pressé");
}
});


Ca c'est OK pour un JButton. Le problème c'est que le bouton c'est moi
qui l'ai écrit !

Si je prends mon cas avec ton exemple, j'ai :

MonBouton b=new MonBouton(...);

b.addMouseListener(new MouseAdapter() {
public void mouseDown(MouseEvent e) {
System.out.println("Click !!!");
}
});

Et dans le mouseDown il ne se passe rien car le message a été intercepté
par mon objet MonBouton et il n'a pas été retransmis. Comme ça :

public class MonBouton extends Composite {

// Mon bouton est un label perso
MonLabel label;

(...)

// Si mouseDown on montre le bouton "enfoncé"
label.addMouseListener(new MouseAdapter() {
public void mouseDown(MouseEvent e) {

// La classe de base "Composite" de mon objet
// relaye-t-elle le message ???
super.mouseDown(e);

// Montrer le bouton "enfoncé" donc décalé
// en bas à gauche de 1 pixel
afficheDeplacer(1,1);

// Faut-il appeler quelque chose ici pour que // l'événement
mouseDown traverse MonBouton
// vers la fenêtre qui le contient ?
}
});

(...)

}

Ce ne sait pas si c'est plus clair ?

Encore merci.


-= CEB =-