Gestion des évènements hérités et locaux

Résolu
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 - 11 mai 2010 à 15:38
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 - 11 mai 2010 à 17:12
Bonjour à tous,
J'aimerai savoir s'il est possible de gérer simultanément des évènements locaux et hérités :
En effet, dans mon programme actuel, j'ai plusieurs GUI qui ont des actions en commun, et pour cela j'ai créé une superclasse qui gère ces évènements liés à la souris (MouseEvent), et à des actions (ActionEvent).
Mais ces GUIs possèdent également des évènements spécifiques, liés eux aussi à la souris ou à des actions. Hors si un GUI possède un MouseEvent local, cela désactive le MouseEvent hérité (dem pour l'ActionEvent, bien sur). Est il possible de gérer les deux en même temps? Merci beaucoup

@+. Hermios

7 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
11 mai 2010 à 16:57
Salut,

C'est normal, vu que tu écrase ta méthode actionPerformed dans ta classe fille.

Donc soit tu fais ainsi :
import javax.swing.JButton; 
import javax.swing.JFrame; 

public class testheritation extends JFrame implements ActionListener{ 
/** 
* 
*/ 
private static final long serialVersionUID = 1L; 
JButton testOk=new JButton("toto"); 

public JButton getButton() 
{ 
testOk.addActionListener(this); 
return testOk; 
} 
@Override 
public void actionPerformed(ActionEvent arg0) { 
// TODO Auto-generated method stub 
System.out.println("super classe"); 
} 

package mainPackage; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 


public class MainClass extends testheritation implements ActionListener{ 
/** 
* 
*/ 
private static final long serialVersionUID = 1L; 
public MainClass() 
{ 
super(); 
add(getButton()); 
} 
/** 
* @param args 
*/ 
public static void main(String[] args) { 
// TODO Auto-generated method stub 
MainClass mc=new MainClass(); 
mc.pack(); 
mc.setVisible(true); 
} 
@Override 
public void actionPerformed(ActionEvent e) { 
// Appel de la méthode mère :
super.actionPerformed(e);
System.out.println("sous Classe"); 
} 


} 


Soit tu ajoutes un nouveau listener à ton bouton dans ta classe fille :
import javax.swing.JButton; 
import javax.swing.JFrame; 

public class testheritation extends JFrame implements ActionListener{ 
/** 
* 
*/ 
private static final long serialVersionUID = 1L; 
JButton testOk=new JButton("toto"); 

public JButton getButton() 
{ 
testOk.addActionListener(this); 
return testOk; 
} 
@Override 
public void actionPerformed(ActionEvent arg0) { 
// TODO Auto-generated method stub 
System.out.println("super classe"); 
} 

package mainPackage; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 


public class MainClass extends testheritation { 

private static final long serialVersionUID = 1L; 

private class ActionListen implements ActionListener {
  public void actionPerformed(ActionEvent e) {
    System.out.println("sous Classe"); 
  }
}
public MainClass() 
{ 
super(); 
add(getButton());
getButton.addActionListener(new ActionListen());
} 
/** 
* @param args 
*/ 
public static void main(String[] args) { 
// TODO Auto-generated method stub 
MainClass mc=new MainClass(); 
mc.pack(); 
mc.setVisible(true); 
} 
} 

______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
11 mai 2010 à 16:03
Salut,

Je vois pas trop quel est ton problème : il te suffit d'ajouter plusieurs listener au même composant, les listeners seront tous appelés.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 2
11 mai 2010 à 16:16
Ben non, justement :
J'ai un menu, défini dans ma superclass, j'associe à ce menu un actionlistener, toujours dans la superclasse. Mais comme j'ai aussi défini un actionListener dans ma sous classe, quand je choisis ce menu, donc que je déclenche l'actionEvent, il va lancer le programme ActionEvent de la classe inférieure (Celle qui hérite de la superclasse) uniquement. Si, en revanche je supprime l'actionEvent dans la classe inférieure, il lance normalement celle de la superclasse.


@+. Hermios
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
11 mai 2010 à 16:24
Salut,

Montre nous ton code pour voir ce qui cloche.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0

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

Posez votre question
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 2
11 mai 2010 à 16:38
Hum, le code est big mouse, alors voici un petit exemple :
super classe:
import javax.swing.JButton;
import javax.swing.JFrame;

public class testheritation extends JFrame implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
JButton testOk=new JButton("toto");

public JButton getButton()
{
testOk.addActionListener(this);
return testOk;
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
System.out.println("super classe");
}

sous classe:
package mainPackage;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class MainClass extends testheritation implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
public MainClass()
{
super();
add(getButton());
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MainClass mc=new MainClass();
mc.pack();
mc.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
System.out.println("sous Classe");
}


}

Si, dans la sous classe, je supprime l'action Listener et la fonction ActionEvent, alors il prend celle de la super classe, sinon, celle de la sous classe, mais jamais les deux en même temps.

Au fait, merci de ton aide :)


@+. Hermios
0
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 2
11 mai 2010 à 17:07
Yop,
Tip top, j'ai choisi la seconde, car en fait, les éléments de la super classe n'agissent que dans la super classe. Mais peu importe, ca marche. Merci beaucoup

@+. Hermios
0
Hermios Messages postés 264 Date d'inscription dimanche 14 avril 2013 Statut Membre Dernière intervention 23 mai 2014 2
11 mai 2010 à 17:12
Je voulais dire, la première, pardon!


@+. Hermios
0
Rejoignez-nous