Cómo obtener el valor de texto de JRadioButton

Estoy creando un proyecto en java. Mi Programa tiene 80 JRadioButtons …. Tengo la necesidad de obtener el valor de texto de ellos.. Ahora estos componentes radiobutton se agregan a ButtonGroup(cada uno tiene 4 botones de radio)…

Sé cómo obtener el valor de texto del botón de radio por este código siguiente

radiobutton1.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                String q1=e.getActionCommand();
                JOptionPane.showMessageDialog(null, q1);
            }
        });

Ahora hay ninguna manera fácil de hacer esto? porque voy a tener que hacer este código de arriba de 80 veces(por ochenta componentes radiobutton si puedo usar el modo de utilización en el método anterior

Información adicional – tengo un Total de 20 ButtonGroups cada uno con 4 botones de radio. Para(80 botones de radio).

  • Yo estaría interesado en ver sólo lo que está comprobando con este gran número de JRadioButtons. Puede decirnos más acerca de lo que esta parte del código que se está haciendo?
  • Lleno De Anguilas que mi … , yo creo que JSlider debe ser más que una alternativa,
  • Lleno De Anguilas yo soy la creación de la Facultad de Retroalimentación del Sistema…Que específicamente nos dijo que el uso de botones de radio… Hay cuatro opciones para cada pregunta… Hay un total de 20 preguntas.
  • todavía no comprendo por qué usted necesita el actionCommand (especialmente en el actionListener) – o, ¿quieres decirle al usuario «cool – elección correcta!» o «¡vaya! … intente con otro!» en el momento que seleccione una de las opciones?
InformationsquelleAutor Tuhin Bhatt | 2011-11-22

4 Kommentare

  1. 3
    I have Total 20 ButtonGroups each with 4 radio buttons. So(80 radio buttons).

    entonces la manera más fácil es

    String actionCommand = "";
    ButtonModel buttonModel = myButtonGroup.getSelection();
    if (buttonModel != null) {
       actionCommand = buttonModel.getActionCommand();
    } else {
       //buttonModel is null.
       //this occurs if none of the radio buttons 
       //watched by the ButtonGroup have been selected.
    }
    • Que puede funcionar bien, así que 1+, pero se debe tener cuidado para comprobar que el ButtonModel devuelto por getSelection() no es nula antes de llamar a getActionCommand() en él. Si no te importa, me gustaría editar tu post para reflejar esto. Además, no hay necesidad de llamar toString() el valor devuelto por getActionCommand() ya que devuelve una Cadena.
    • Lleno De Anguilas gracias excelente sugerencia …
    • Lleno de Anguilas de La cadena de actionCommand no es a imprimir el texto de JRadiobutton, pero imprime null.. se va en la (si buttonModel !=null) condición… y luego se imprime null… Mi Código es el siguiente si(buttonModel!=null){actionCommand=buttonModel.getActionCommand(); System.a cabo.println(actionCommand);}
    • Estoy teniendo problemas con la sugerencia realizada por el Aerodeslizador Lleno de Anguilas me pueden ayudar..
    • Bhatt allí duro para ayudar sin ver lo que se trató, actualizar su pregunta con rellevant código, cualquier persona será capaz de ayudarle
  2. 2

    La razón de que se enfrentan a este problema es debido a que ha creado cada JRadioButton manualmente, supongo (en lugar de un bucle).

    Si usted realmente no puede hacerlo de otra manera, usted puede utilizar un poco de código inteligente:

    Container c = ...; //The component containing the radiobuttons
    Component[] comps = c.getComponents();
    for (int i = 0; i < c.getComponentCount(); ++i)
    {
        Component comp = comps[i];
        if (comp instanceof JRadioButton)
        {
             JRadioButton radiobutton = (JRadioButton) comp;
             //add the listener
             radio.addActionListener(...);
        }
    }
  3. 2

    Puede ser que en lugar de definir la acción de escucha para cada botón de radio de forma individual, debe definir una acción común-escucha para todos los radio botones.

    por ejemplo,

    public class RadioActionListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            //String q1=e.getActionCommand();
    
            //Use the ActionEvent#getSource() method which gives you the reference to the
            //radio-button that caused the event
            JRadioButton theJRB = (JRadioButton) e.getSource();
            JOptionPane.showMessageDialog(null, theJRB.getText());
        }
    }

    A continuación, puede utilizar la siguiente manera:

    ActionListener radioAL = new RadioActionListener();
    
    radiobutton1.addActionListener(radioAL);
    radiobutton2.addActionListener(radioAL);

    También, la ActionEvent#getActionCommand() devuelve la cadena de comando asociado con la acción no extacly el texto de comando-componente.

    • No hay necesidad de crear 80 RadioActionListeners. Crear y compartir para todos los botones de radio. Es por eso que usted escribe el código genérico de obtener el código fuente de los eventos desde la ActionEvent.
    • Estás en lo correcto. Editado. Gracias.
  4. 1

    La clave para la implementación de un diseño como el que usted desee (creo) es el uso de matrices para su máximo poder. Por ejemplo, usted podría tener una de 2 Dimensiones de la matriz de Cadena que contiene el JRadioButton textos, y un 1-matriz Bidimensional de ButtonGroups y, a continuación, ser capaz de configurar su interfaz gráfica de usuario y consulta de su interfaz gráfica de usuario con bucles for y bucles for anidados (y usando la excelente sugerencia de mKorbel).

    Por ejemplo:

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class Foo002 extends JPanel {
       public static final String[][] RADIO_TEXTS = {
          {"A1","A2","A3","A4"}, {"B1","B2","B3","B4"}, 
          {"C1","C2","C3","C4"}, {"D1","D2","D3","D4"}, 
          {"E1","E2","E3","E4"}, {"F1","F2","F3","F4"}, 
          {"G1","G2","G3","G4"}, {"H1","H2","H3","H4"}, 
          {"I1","I2","I3","I4"}, {"J1","J2","J3","J4"}, 
          {"K1","K2","K3","K4"}, {"L1","L2","L3","L4"}, 
          {"M1","M2","M3","M4"}, {"N1","N2","N3","N4"}, 
          {"O1","O2","O3","O4"}, {"P1","P2","P3","P4"}, 
          {"Q1","Q2","Q3","Q4"}, {"R1","R2","R3","R4"}, 
          {"S1","S2","S3","S4"}, {"T1","T2","T3","T4"}
          };
    
       private ButtonGroup[] btnGroups = new ButtonGroup[RADIO_TEXTS.length];
    
       public Foo002() {
          JPanel radioPanel = new JPanel(new GridLayout(0, 2));
          for (int i = 0; i < RADIO_TEXTS.length; i++) {
             JPanel panel = new JPanel(new GridLayout(1, 0));
             btnGroups[i] = new ButtonGroup();
             for (int j = 0; j < RADIO_TEXTS[i].length; j++) {
                String text = RADIO_TEXTS[i][j];
                JRadioButton rBtn = new JRadioButton(text);
                rBtn.setActionCommand(text);
                btnGroups[i].add(rBtn);
                panel.add(rBtn);
             }
             panel.setBorder(BorderFactory.createLineBorder(Color.black));
             radioPanel.add(panel);
          }
    
          JButton getRadioChoicesBtn = new JButton(new AbstractAction("Get Radio Choices") {
             public void actionPerformed(ActionEvent arg0) {
                for (ButtonGroup btnGroup : btnGroups) {
                   ButtonModel btnModel = btnGroup.getSelection();
                   if (btnModel != null) {
                      System.out.println("Selected Button: " + btnModel.getActionCommand());
                   }
                }
             }
          });
          JPanel btnPanel = new JPanel();
          btnPanel.add(getRadioChoicesBtn);
    
          setLayout(new BorderLayout());
          add(radioPanel, BorderLayout.CENTER);
          add(btnPanel, BorderLayout.SOUTH);
       }
    
       private static void createAndShowGui() {
          JFrame frame = new JFrame("RadioPanels");
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.getContentPane().add(new Foo002());
          frame.pack();
          frame.setLocationRelativeTo(null);
          frame.setVisible(true);
       }
    
       public static void main(String[] args) {
          SwingUtilities.invokeLater(new Runnable() {
             public void run() {
                createAndShowGui();
             }
          });
       }
    
    }
    • bueno, bueno, bueno gracias Pete +1
    • techically correcto, pero … hey, estamos en OO-tierra. Una matriz de matrices para modelar un montón de preguntas con opciones es … pre-histórico <p>
    • De acuerdo. Esto es simplemente una SSCCE para la prueba de concepto. En la vida real, la pregunta no sería parte del código, pero de los datos.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea