@Override
        public void actionPerformed(ActionEvent e) {

          if (e.getSource() == cancelButton) {
            getController().cancelPlayCard();
          } else if (e.getSource() == useButton) {
            if (devCards.getSelectedDevCard() == DevCardType.MONOPOLY) {
              closeModal();
              getController().playMonopolyCard(resCard1.getSelectedResourceCard());
            } else if (devCards.getSelectedDevCard() == DevCardType.YEAR_OF_PLENTY) {
              closeModal();
              getController()
                  .playYearOfPlentyCard(
                      resCard1.getSelectedResourceCard(), resCard2.getSelectedResourceCard());
            }
          }
        }
 @Override
 public void reset() {
   useButton.setText(DEFAULT_USE_BUTTON_LABEL);
   useButton.setEnabled(false);
   resCard1.setEnabled(false);
   resCard2.setEnabled(false);
   devCards.clearSelection();
   resCard1.clearSelection();
   resCard2.clearSelection();
 }
        @Override
        public void selectedButtonChanged(ButtonGroupPanel source) {

          DevCardType selectedDevCard = devCards.getSelectedDevCard();

          if (selectedDevCard == null) {
            useButton.setText(DEFAULT_USE_BUTTON_LABEL);
            useButton.setEnabled(false);
            resCard1.setEnabled(false);
            resCard2.setEnabled(false);
          } else if (selectedDevCard == DevCardType.MONUMENT) {
            useButton.setText(DEFAULT_USE_BUTTON_LABEL);
            useButton.setEnabled(false);
            resCard1.setEnabled(false);
            resCard2.setEnabled(false);

            closeModal();
            getController().playMonumentCard();
          } else if (selectedDevCard == DevCardType.ROAD_BUILD) {
            useButton.setText(DEFAULT_USE_BUTTON_LABEL);
            useButton.setEnabled(false);
            resCard1.setEnabled(false);
            resCard2.setEnabled(false);

            closeModal();
            getController().playRoadBuildCard();
          } else if (selectedDevCard == DevCardType.SOLDIER) {
            useButton.setText(DEFAULT_USE_BUTTON_LABEL);
            useButton.setEnabled(false);
            resCard1.setEnabled(false);
            resCard2.setEnabled(false);

            closeModal();
            getController().playSoldierCard();
          } else if (selectedDevCard == DevCardType.MONOPOLY) {
            useButton.setText("use monopoly");
            useButton.setEnabled(resCard1.getSelectedResourceCard() != null);
            resCard1.setEnabled(true);
            resCard2.setEnabled(false);
          } else if (selectedDevCard == DevCardType.YEAR_OF_PLENTY) {
            useButton.setText("use year of plenty");
            useButton.setEnabled(
                resCard1.getSelectedResourceCard() != null
                    && resCard2.getSelectedResourceCard() != null);
            resCard1.setEnabled(true);
            resCard2.setEnabled(true);
          }
        }
  public PlayDevCardView() {
    this.setOpaque(true);
    this.setBorder(BorderFactory.createLineBorder(Color.black, BORDER_WIDTH));

    this.setLayout(new BorderLayout());

    // Title Panel (immutable)
    JPanel titlePanel = new JPanel(new BorderLayout());
    title = new JLabel("Development Cards");
    FontUtils.setFont(title, LABEL_TEXT_SIZE);
    titlePanel.add(title, BorderLayout.WEST);
    this.add(titlePanel, BorderLayout.NORTH);

    JPanel mainPanel = new JPanel();
    mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

    // Separator
    mainPanel.add(new JSeparator());

    // Blank space
    mainPanel.add(Box.createRigidArea(new Dimension(0, 10)));

    // Development Card Chooser
    devCards = new DevelopmentCardChooser();
    devCards.setListener(btnGrpPnlListener);
    mainPanel.add(devCards);

    // Blank space
    mainPanel.add(Box.createRigidArea(new Dimension(0, 10)));

    JPanel resPanel = new JPanel();
    resPanel.setLayout(new BoxLayout(resPanel, BoxLayout.Y_AXIS));

    // Resource Card 1
    resCard1 = new ResourceCardChooser();
    resCard1.setEnabled(false);
    resCard1.setListener(btnGrpPnlListener);
    mainPanel.add(resCard1);

    // Blank space
    mainPanel.add(Box.createRigidArea(new Dimension(0, 5)));

    // Resource Card 2
    resCard2 = new ResourceCardChooser();
    resCard2.setEnabled(false);
    resCard2.setListener(btnGrpPnlListener);
    resPanel.add(resCard2);

    mainPanel.add(resPanel);

    // Blank space
    mainPanel.add(Box.createRigidArea(new Dimension(0, 10)));

    // Use Dev Card Button
    JPanel usePanel = new JPanel();
    useButton = new JButton(DEFAULT_USE_BUTTON_LABEL);
    useButton.setEnabled(false);
    FontUtils.setFont(useButton, BUTTON_TEXT_SIZE);
    useButton.addActionListener(actionListener);
    usePanel.add(useButton);
    mainPanel.add(usePanel);

    // Blank space
    mainPanel.add(Box.createRigidArea(new Dimension(0, 10)));

    // Cancel Button
    JPanel cancelPanel = new JPanel();
    cancelButton = new JButton("Cancel");
    FontUtils.setFont(cancelButton, BUTTON_TEXT_SIZE);
    cancelButton.addActionListener(actionListener);
    cancelPanel.add(cancelButton);
    mainPanel.add(cancelPanel);

    this.add(mainPanel, BorderLayout.CENTER);
  }
 @Override
 public void setCardAmount(DevCardType cardType, int amount) {
   devCards.setCardAmount(cardType, amount);
 }
 @Override
 public void setCardEnabled(DevCardType cardType, boolean enabled) {
   devCards.setCardEnabled(cardType, enabled);
 }