我的程序中有一组JRadioButton

public class SalePanel extends JPanel  implements View {
    private JTextField sell = new JTextField(5);
    private ButtonGroup buttons = new ButtonGroup();
    private Stadium stadium;

我在这里添加了按钮:
private void build(Stadium stadium){
    add(buttonBox(stadium));
}

这是我创建按钮的方式:
private Box buttonBox(Stadium stadium)
{   Box box = Box.createVerticalBox();
    SaleListener listener = new SaleListener();
    for (Group group: stadium.groups()) {
        box.add(button(group, listener));

    }
    return box;
}


private JRadioButton button(Group group, SaleListener listener){
    JRadioButton button  = new JRadioButton();
    button.addActionListener(listener);
    buttons.add(button);
    button.add(Box.createHorizontalStrut(35));
    button.add(new JLabel(group.name() + " @ $"+ formatted(group.price())));
    return button;
}

按钮的标签在这里:button.add(new JLabel(group.name()
我现在的任务是:
  • 从事件中获取单选按钮标签(我使用getActionCommand()获取标签)
  • 从标签获取组名(我需要在一个空格上分割字符串,并获取返回数组中的第一个字符串)。
  • 从名称中查找组:
    查找名称为
  • 的组

    所以,我通过以下方式进行操作:
    private class SaleListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
    
            String[] words = e.getActionCommand().split(" ");
            String groupName  = words[0];
            for (Group group: stadium.groups()) {
                if (group.matches(groupName)){
                    group.sell(sale());
                    update();
                }
            }
        }
    }
    

    不幸的是,它不起作用,我找不到错误在哪里。
    您能给我有关此任务的任何建议吗?我究竟做错了什么?

    ps。这行代码String[] words = e.getActionCommand().split(" ");没有满足我的要求。我尝试System.out.println(words[0]),它为空,但是应该有组名:(

    最佳答案

    这个...

    button.add(new JLabel(group.name() + " @ $"+ formatted(group.price())));
    

    没道理您应该使用...
    button.setText(group.name() + " @ $"+ formatted(group.price()));
    

    和...
    button.setActionCommand(group.name());
    

    如果您不在乎其余文字...

    10-05 17:47