[英]How to get the text value of JRadioButton
我正在用java创建一个项目。 我的程序有 80 个 JRadioButtons .... 我需要获取它们的文本值.. 现在这些单选按钮被添加到 ButtonGroup(每个有 4 个单选按钮)...
我知道如何通过以下代码从单选按钮获取文本值
radiobutton1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String q1=e.getActionCommand();
JOptionPane.showMessageDialog(null, q1);
}
});
现在有什么简单的方法可以做到这一点吗? 因为我将不得不在上面的代码中执行 80 次(对于 80 个单选按钮,如果我使用上面的方法使用上面的方法
附加信息 - 我总共有 20 个按钮组,每个按钮组有 4 个单选按钮。 所以(80 个单选按钮)。
I have Total 20 ButtonGroups each with 4 radio buttons. So(80 radio buttons).
那么最简单的方法是
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.
}
可能不是为每个单选按钮单独定义动作侦听器,而是应该为所有单选按钮定义一个公共动作侦听器。
例如
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());
}
}
然后,您可以按如下方式使用它:
ActionListener radioAL = new RadioActionListener();
radiobutton1.addActionListener(radioAL);
radiobutton2.addActionListener(radioAL);
另外, ActionEvent#getActionCommand()
返回与动作不extacly命令组件的文本相关联的命令字符串。
您面临这个问题的原因是因为您手动创建了每个 JRadioButton,我猜(而不是循环)。
如果你真的不能这样做,你可以使用一些智能代码:
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(...);
}
}
实现您想要的设计(我认为)的关键是充分利用数组。 例如,您可以拥有一个包含 JRadioButton 文本的 2 维 String 数组和一个 ButtonGroups 的 1 维数组,然后可以轻松设置您的 GUI 并使用 for 循环和嵌套 for 循环查询您的 GUI(和使用 mKorbel 的绝妙建议)。
例如:
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();
}
});
}
}
这对我有用
{
...
String nomSelected = getSelectedButtonText(jbgVariables);
...
}
String getSelectedButtonText(ButtonGroup buttonGroup) {
Enumeration<AbstractButton> enu = buttonGroup.getElements();
while (enu.hasMoreElements()) {
AbstractButton button = enu.nextElement();
if(button.isSelected())
return button.getText();
}
return null;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.