title: Can't make JComboBox update JFrame
body: <p>A little help would be really appreciated.</p>
  
  <h1>Problem</h1>
  
  <p>We have a fantasy class with a a combo box on it. When selecting a formation from the combobox, the frame gets updated with buttons. However because when I add the action listener to the combo box, it will only let me do it in the constructor of the fantasy class when creating my class in the main method, I have to hand in the fantasy class and the squad class to the <code>TeamController</code> class so when creating the fantasy class, the action listner isn't on the combo box, so it's not working. Any help would be highly appreciated.</p>
  
  <h1>Main Class</h1>
  
  <pre><code>public class Main {
  
    public static void main(String[] args) {
      Fantasy f = new Fantasy();
      Squad s = new Squad();
      TeamController tc = new TeamController(f, s);
      TextController txC = new TextController(s);
      f.updateController(tc, txC);
      f.setVisible(true);
    }
  
  }
  </code></pre>
  
  <h1>Fantasy class</h1>
  
  <pre><code>public class Fantasy extends JFrame {
    private JPanel goalPanel;
    private JPanel defendPanel;
    private JPanel midPanel;
    private JPanel attPanel;
    private JPanel bench;
    private JComboBox formation;
    private Button myButton;
    private TeamController control;
    private TextController tControl;
    private List &lt; Button &gt; buttons;
  
    public Fantasy() {
      super("Fantasy Football");
      buttons = new ArrayList &lt; Button &gt; ();
      createWidgets();
    }
  
    public void createWidgets() {
      JPanel formPanel = new JPanel(new GridLayout(1, 0));
      goalPanel = new JPanel(new FlowLayout());
      defendPanel = new JPanel(new FlowLayout());
      midPanel = new JPanel(new FlowLayout());
      attPanel = new JPanel(new FlowLayout());
      bench = new JPanel(new FlowLayout());
  
      JComboBox formation = new JComboBox();
      String[] addFormation = {
        "4 - 4 - 2", "4 - 3 - 3", "3 - 5 - 2", "5 - 3 - 2", "3 - 4 - 3", "4 - 5 - 1"
      };
  
      for (String newForm: addFormation) {
        formation.addItem(newForm);
      }
  
      formation.addActionListener(control);
  
      setLayout(new GridLayout(6, 0));
      add(formPanel);
      formPanel.add(formation);
      add(goalPanel);
      add(defendPanel);
      add(midPanel);
      add(attPanel);
      add(bench);
  
      pack();
      setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
  
    public JComboBox getForm() {
      return formation;
    }
  
    public JPanel getGoal() {
      return goalPanel;
    }
  
    public JPanel getDef() {
      return defendPanel;
    }
  
    public JPanel getMid() {
      return midPanel;
    }
  
    public JPanel getAtt() {
      return attPanel;
    }
  
    public JPanel getBench() {
      return bench;
    }
  
    public void createDefender(String text, String ID) {
      addButtons(text, ID, defendPanel);
    }
  
    public void createMid(String text, String ID) {
      addButtons(text, ID, midPanel);
    }
  
    public void createAtt(String text, String ID) {
      addButtons(text, ID, attPanel);
    }
  
    public void addButtons(String text, String ID, JPanel panel) {
      myButton = new Button(text, ID);
      myButton.getButton().addActionListener(control);
      myButton.getText().addTextListener(tControl);
      buttons.add(myButton);
      panel.add(myButton);
    }
  
    public void updateController(TeamController control, TextController tControl) {
      this.control = control;
      this.tControl = tControl;
    }
  
    public List &lt; Button &gt; getButtons() {
      return buttons;
    }
  
  }
  </code></pre>
  
  <h1>ActionListner - TeamController class</h1>
  
  <pre><code>public class TeamController implements ActionListener {
    private Fantasy fantasy;
    private Squad squad;
    private JComboBox form;
    private ArrayList &lt; Button &gt; button;
  
    public TeamController(Fantasy fantasy, Squad squad) {
      this.fantasy = fantasy;
      this.form = fantasy.getForm();
      this.button = (ArrayList &lt; Button &gt; ) fantasy.getButtons();
      this.squad = squad;
    }
  
  
    public void actionPerformed(ActionEvent e) {
      if (e.getSource() == form) {
        comboChooser((JComboBox) e.getSource());
      } else {
        fileChooser((Button) e.getSource());
      }
    }
  
    public void comboChooser(JComboBox form) {
      //restart the pane
      fantasy.getContentPane().removeAll();
      fantasy.createWidgets();
      //add the goalie buttons and labels in
      fantasy.addButtons("GoalKeeper", squad.getAllGoal().get(0).getID(), fantasy.getGoal());
      //2. break it up into each def mid att
      //JComboBox format = form;
      String[] split = ((String) form.getSelectedItem()).split("-");
      int[] splits = new int[3];
      for (int i = 0; i &lt; split.length; i++) {
        splits[i] = Integer.parseInt(split[i].trim());
      }
      //3. create number of widgets for each posit in each panel
      //4. add leftover to bench
  
      makeDefender(splits[0], squad.getAllDef());
      makeMid(splits[1], squad.getAllMid());
      makeAttack(splits[2], squad.getAllAtt());
  
      fantasy.pack();
    }
  
    public void fileChooser(Button button) {
      final JFileChooser fileChooser = new JFileChooser("C:\\Users\\Michael\\Documents\\Java WorkSpace\\ExerciseThree\\Minor Piece of Coursework 3 Resources\\squad");
      int getVal = fileChooser.showOpenDialog(button.getButton());
      if (getVal == JFileChooser.APPROVE_OPTION) {
        File file = fileChooser.getSelectedFile();
        button.getButton().setVisible(false);
        button.add(button.updateButton(file), BorderLayout.CENTER);
        Player selectedPlayer = squad.getByID(button.getName());
        selectedPlayer.setPath(file.getPath());
        String playerName = file.getName();
        if (playerName.endsWith(".jpg")) {
          playerName.substring(0, playerName.length() - 4);
          selectedPlayer.setName(playerName);
        }
        button.getText().setText(playerName);
      } else {
        System.out.println("Cancelled your choice");
      }
  
    }
  
    public void makeDefender(int number, List &lt; Defender &gt; list) {
      for (int i = 0; i &lt; number; i++) {
        String ID = list.get(i).getID();
        fantasy.createDefender("Defender", ID);
      }
    }
  
    public void makeMid(int number, List &lt; Midfielder &gt; list) {
      for (int i = 0; i &lt; number; i++) {
        String ID = list.get(i).getID();
        fantasy.createMid("Midfielder", ID);
      }
    }
  
    public void makeAttack(int number, List &lt; Striker &gt; list) {
      for (int i = 0; i &lt; number; i++) {
        String ID = list.get(i).getID();
        fantasy.createAtt("Striker", ID);
      }
    }
  
    public void updateSquad(Squad squad) {
      this.squad = squad;
    }
  }
  </code></pre>