How to get the text value of JRadioButton

亡梦爱人 提交于 2019-12-01 13:39:35
mKorbel
I have Total 20 ButtonGroups each with 4 radio buttons. So(80 radio buttons).

then easiest way is

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.
}

The reason you are facing this problem is because you created every JRadioButton manually, I guess (instead of a loop).

If you really can't do it otherwise, you can use some intelligent code:

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(...);
    }
}

May be instead of defining action-listener for each radio-button individually, you should define a common action-listener for all the radio-buttons.

e.g.

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());
    }
}

Then, you can use it as follows:

ActionListener radioAL = new RadioActionListener();

radiobutton1.addActionListener(radioAL);
radiobutton2.addActionListener(radioAL);

Also, the ActionEvent#getActionCommand() returns the command string associated with the action not extacly the text of command-component.

The key to implementing a design like you desire (I think) is to use arrays to their fullest power. For instance, you could have a 2-Dimensional array of String that holds the JRadioButton texts, and a 1-Dimensional array of ButtonGroups and then be able to easily set up your GUI and query your GUI with for loops and nested for loops (and using the excellent suggestion of mKorbel).

For example:

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();
         }
      });
   }

}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!