virer les actions d'un JButton

virer les actions d'un JButton - Java - Programmation

Marsh Posté le 01-08-2006 à 12:08:37    

bonjour,
 
je cherche à remplacer dynamiquement l'action liée à un JButton de cette manière :
 

Code :
  1. public void setActionOnClassifyButton(ActionListener al, boolean removeOthers) {
  2.  if (removeOthers) {
  3.   for (int i = 0; i < classifyButton.getActionListeners().length; i++) {
  4.    classifyButton.removeActionListener(classifyButton.getActionListeners()[i]);
  5.   }
  6.  }
  7.  classifyButton.addActionListener(al);
  8. }


 
Problème : c'est toujours l'ancienne action qui s'execute.
 
Je ne trouve pas de méthode removeAllActionListeners() implémentée ...
 
Quelqu'un aurait il une idée ?
 
Merci beaucoup, et bon app à ceux qui mangent !

Reply

Marsh Posté le 01-08-2006 à 12:08:37   

Reply

Marsh Posté le 01-08-2006 à 16:30:37    

up

Reply

Marsh Posté le 01-08-2006 à 17:38:33    

Je me suis intéressé à la question et je ne comprends pas d'où viens ton dysfonctionnement.
 
J'ai codé cette classe et ça marche très bien!
 

Code :
  1. import java.awt.BorderLayout;
  2. import java.awt.Dimension;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import javax.swing.JButton;
  6. import javax.swing.JFrame;
  7. import javax.swing.JPanel;
  8. public class Test {
  9. private JButton classifyButton;
  10. public Test() {
  11.  classifyButton = new JButton("Test" );
  12.  classifyButton.addActionListener(new ActionListener() {
  13.   public void actionPerformed(ActionEvent arg0) {
  14.    System.out.println("Ancienne action" );
  15.   }
  16.  });
  17. }
  18. public void setActionOnClassifyButton(ActionListener al,
  19.   boolean removeOthers) {
  20.  if (removeOthers) {
  21.   for (int i = 0; i < classifyButton.getActionListeners().length; i++) {
  22.    classifyButton.removeActionListener(classifyButton
  23.      .getActionListeners()[i]);
  24.   }
  25.  }
  26.  classifyButton.addActionListener(al);
  27. }
  28. public static void main(String[] args) {
  29.  final Test test = new Test();
  30.  JButton button = new JButton("Changer l'action" );
  31.  button.addActionListener(new ActionListener() {
  32.   public void actionPerformed(ActionEvent arg0) {
  33.    test.setActionOnClassifyButton(new NewActionListener(), true);
  34.   }
  35.  });
  36.  JFrame frame = new JFrame();
  37.  JPanel panel = new JPanel();
  38.  panel.setLayout(new BorderLayout());
  39.  panel.add(test.getClassifyButton(), BorderLayout.NORTH);
  40.  panel.add(button, BorderLayout.SOUTH);
  41.  frame.getContentPane().add(panel);
  42.  frame.setVisible(true);
  43.  frame.pack();
  44.  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  45. }
  46. /**
  47.  * @return Renvoie le classifyButton.
  48.  */
  49. public JButton getClassifyButton() {
  50.  return classifyButton;
  51. }
  52. }
  53. class NewActionListener implements ActionListener {
  54. public void actionPerformed(ActionEvent arg0) {
  55.  System.out.println("Nouvelle Action" );
  56. }
  57. }

Reply

Marsh Posté le 03-08-2006 à 09:51:32    

Je comprends pas ...
Peut être est ce parce que je le fait alors que ma frame est déjà affichée ?
 
Mais updateUI() ou repaint() ni font rien.  
Comment peut on rafraîchir toute une frame et la redessiner proprement ?
 
edit : en evitant pack() qui fait des trucs laids


Message édité par meumeul le 03-08-2006 à 09:52:04
Reply

Marsh Posté le 03-08-2006 à 10:12:57    

Méthode validate, mais ça n'a rien à voir avec ton problème : Ce n'est pas l'affichage qui pose problème mais l'action associée au bouton.
Essaie de t'inspirer de mon code et de comprendre ce qui ne fonctionne pas dans le tien.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed