Gestion des évènements hérités et locaux [Résolu]

Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 11 mai 2010 à 15:38 - Dernière réponse : Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention
- 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
Afficher la suite 

7 réponses

Répondre au sujet
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 11 mai 2010 à 16:57
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_DARKSIDIOUS
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 11 mai 2010 à 16:03
0
Utile
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
Commenter la réponse de cs_DARKSIDIOUS
Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 11 mai 2010 à 16:16
0
Utile
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
Commenter la réponse de Hermios
cs_DARKSIDIOUS 15838 Messages postés jeudi 8 août 2002Date d'inscription 4 mars 2013 Dernière intervention - 11 mai 2010 à 16:24
0
Utile
Salut,

Montre nous ton code pour voir ce qui cloche.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS
Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 11 mai 2010 à 16:38
0
Utile
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
Commenter la réponse de Hermios
Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 11 mai 2010 à 17:07
0
Utile
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
Commenter la réponse de Hermios
Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 11 mai 2010 à 17:12
0
Utile
Je voulais dire, la première, pardon!


@+. Hermios
Commenter la réponse de Hermios

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.