2011-07-30 9 views

Respuesta

11

Según mi comentario, no puede agregar un oyente a un grupo de botones. Es probable que tenga que ir con un ActionListener agregado a los JRadioButtons individuales.

Si esto no responde a tu pregunta, por favor avísanos más detalles sobre tu problema.

Editar 1
supongo que siempre podría extender ButtonGroup tal que acepta ActionListeners. Por ejemplo:

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

import javax.swing.AbstractButton; 
import javax.swing.ButtonGroup; 
import javax.swing.ButtonModel; 
import javax.swing.event.EventListenerList; 

@SuppressWarnings("serial") 
public class MyButtonGroup extends ButtonGroup { 
    private ActionListener btnGrpListener = new BtnGrpListener(); 
    private EventListenerList listenerList = new EventListenerList(); 

    @Override 
    public void add(AbstractButton b) { 
     b.addActionListener(btnGrpListener); 
     super.add(b); 
    } 

    public void addActionListener(ActionListener listener) { 
     listenerList.add(ActionListener.class, listener); 
    } 

    public void removeActionListener(ActionListener listener) { 
     listenerList.remove(ActionListener.class, listener); 
    } 

    protected void fireActionListeners() { 
     Object[] listeners = listenerList.getListenerList(); 
     String actionCommand = ""; 
     ButtonModel model = getSelection(); 
     if (model != null) { 
     actionCommand = model.getActionCommand(); 
     } 
     ActionEvent ae = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, actionCommand); 
     for (int i = listeners.length-2; i>=0; i-=2) { 
      if (listeners[i]== ActionListener.class) { 
       ((ActionListener)listeners[i+1]).actionPerformed(ae); 
      } 
     } 
    } 

    private class BtnGrpListener implements ActionListener { 

     public void actionPerformed(ActionEvent ae) { 
     fireActionListeners(); 
     } 
    } 
} 

y comprobados por el siguiente:

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

import javax.swing.*; 

public class MyButtonGroupTest { 
    private static void createAndShowUI() { 
     String[] data = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"}; 

     JPanel panel = new JPanel(new GridLayout(0, 1)); 
     MyButtonGroup myBtnGrp = new MyButtonGroup(); 
     myBtnGrp.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      System.out.println("Action Command is: " + e.getActionCommand()); 
     } 
     }); 

     for (String text : data) { 
     JRadioButton radioBtn = new JRadioButton(text); 
     radioBtn.setActionCommand(text); 
     myBtnGrp.add(radioBtn); 
     panel.add(radioBtn); 
     } 

     JFrame frame = new JFrame("MyButtonGroupTest"); 
     frame.getContentPane().add(panel); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowUI(); 
     } 
     }); 
    } 
} 

Pero esto todavía finalmente añade ActionListers a cada JRadioButton para lograr sus fines; simplemente hace esto detrás de escena en el reemplazo de método add de MyButtonGroup.

Cuestiones relacionadas