Newer
Older
marking / src / ui / RadioGroup.java
Mark on 6 Jun 2014 1 KB Initial commit.
package ui;

import java.awt.FlowLayout;
import java.util.HashMap;
import java.util.Map;
import javax.swing.ButtonGroup;
import javax.swing.ButtonModel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

public class RadioGroup extends JPanel {

   private Integer min;
   private Integer max;

   private final Map<Integer, JRadioButton> radios = new HashMap<>();
   private final Map<ButtonModel, Integer> models = new HashMap<>();
   private ButtonGroup group = new ButtonGroup();

   public RadioGroup(int min, int max) {
      this.min = min;
      this.max = max;

      this.setLayout(new FlowLayout());
      for (int i = min; i <= max; i++) {
         JRadioButton rad = new JRadioButton();
         rad.setText(String.valueOf(i));
         radios.put(i, rad);
         group.add(rad);
         models.put(rad.getModel(), i);
         this.add(rad);
      }
   }

   public void setSelected(Integer idx) {
      JRadioButton rad = radios.get(idx);
      group.setSelected(rad.getModel(), true);
   }

   public void max() {
      setSelected(max);
   }

   public void zero() {
      setSelected(0);
   }

   public Integer getSelected() {
      return models.get(group.getSelection());
   }

   // replaces all buttons with new ones
   public void changeRanges(int min, int max) {
      this.min = min;
      this.max = max;

      radios.clear();
      models.clear();
      group = new ButtonGroup();
      this.removeAll();

      for (int i = min; i <= max; i++) {
         JRadioButton rad = new JRadioButton();
         rad.setText(String.valueOf(i));
         radios.put(i, rad);
         group.add(rad);
         models.put(rad.getModel(), i);
         this.add(rad);
      }
   }

}