3

我在 a 中有一组RadioButtons JPanel。我希望它们在未选中时具有绿色背景,在选中时具有红色背景。根据 s 的本质JRadioButton,一次只能有一个是红色的。

我的问题是在 an 中设置背景ActionListener不起作用,因为它不会更新其余按钮。

有什么方法可以迭代 的元素ButtonGroup吗?(该方法getElements似乎不是我需要的。)

这是一个 SsCcE:

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

import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.SwingUtilities;

public class Test {

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.setPreferredSize(new Dimension(1024, 768));
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                JPanel content = new JPanel();

                // This is the important stuff. :)

                ButtonGroup group = new ButtonGroup();
                for (int i = 0; i < 5; i++) {
                    final JRadioButton btn = new JRadioButton(String.valueOf(i));
                    group.add(btn);
                    content.add(btn);
                    btn.setBackground(Color.green);
                    btn.addActionListener(new ActionListener() {

                        @Override
                        public void actionPerformed(ActionEvent event) {
                            if (btn.isSelected()) {
                                btn.setBackground(Color.red);
                            } else {
                                btn.setBackground(Color.green);
                            }
                        }
                    });
                }

                // The important stuff is over. :(

                frame.setContentPane(content);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }

        });
    }
}
4

0 回答 0