An enum could work nicely here, without need to use a Map or ArrayList, if so desired....
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.*;
import javax.swing.*;
public class ColorBtns extends JPanel {
public ColorBtns() {
setLayout(new GridLayout(0, 1));
ButtonGroup btnGroup = new ButtonGroup();
ActionListener actnListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
String colorStr = evt.getActionCommand().toUpperCase();
MyColor myColor = MyColor.valueOf(colorStr);
setBackground(myColor.getColor());
}
};
for (MyColor myColor : MyColor.values()) {
JRadioButton radioBtn = new JRadioButton(myColor.getText());
radioBtn.setOpaque(false);
radioBtn.setActionCommand(myColor.getText());
radioBtn.addActionListener(actnListener);
btnGroup.add(radioBtn);
add(radioBtn);
}
}
private static void createAndShowGui() {
ColorBtns mainPanel = new ColorBtns();
JFrame frame = new JFrame("ColorBtns");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
enum MyColor {
RED(Color.red, "Red"), ORANGE(Color.orange, "Orange"), YELLOW(Color.yellow,
"Yellow"), GREEN(Color.green, "Green"), BLUE(Color.blue, "Blue");
private Color color;
private String text;
private MyColor(Color color, String text) {
this.color = color;
this.text = text;
}
public Color getColor() {
return color;
}
public String getText() {
return text;
}
}