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

[Résolu]
Signaler
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
-
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
-
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

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
128
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
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
128
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
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
2
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
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
128
Salut,

Montre nous ton code pour voir ce qui cloche.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
2
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
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
2
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
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
2
Je voulais dire, la première, pardon!


@+. Hermios