@Override public void mouseClicked(MouseEvent me) { JLabel clickedCard = (JLabel) me.getSource(); int index = this.selectedCards.indexOf(this.cards.get(clickedCard)); /* already selected */ if (index >= 0) { this.selectedCards.remove(index); clickedCard.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); } else if (this.selectedCards.size() < this.maxNumberOfCards) { this.selectedCards.add(this.cards.get(clickedCard)); clickedCard.setBorder(BorderFactory.createLineBorder(Color.BLUE, 2)); } if ((this.player.hasValidCardExchange(this.selectedCards) && WarGame.getInstance().isPlacing()) || (WarGame.getInstance().isAttacking() && this.selectedCards.size() < this.maxNumberOfCards) && !player.getName().equals(WarGame.getInstance().getCurrentPlayer().getName())) { this.exchangeCardsButton.setEnabled(true); } else { this.exchangeCardsButton.setEnabled(false); } }
public CardSelectionFrame(Player p, int maxNumberOfCards, boolean forcedToExchange) { this.player = p; this.maxNumberOfCards = maxNumberOfCards; if (forcedToExchange) { this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); } else { this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } this.setTitle( String.format("%s's cards%s", p.getName(), forcedToExchange ? " (Must exchange)" : "")); this.setSize(new Dimension(1100 + 2 * 2 * 5, 600)); this.getContentPane().setLayout(new BorderLayout()); this.setResizable(false); this.setLocationRelativeTo(null); /* Card display panel */ this.cardDisplayPanel = new JPanel(); this.cardDisplayPanel.setLayout(new BoxLayout(cardDisplayPanel, BoxLayout.X_AXIS)); for (Card c : p.getCards()) { JLabel cardLabel = new JLabel(); cardLabel.setSize(220, 363); cardLabel.setAlignmentX(Component.CENTER_ALIGNMENT); cardLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 2)); cardLabel.addMouseListener(this); String imagePath; if (c instanceof TerritoryCard) { TerritoryCard tc = (TerritoryCard) c; imagePath = String.format( "resources/cards/war_carta_%s.png", tc.getTerritory().getName().toLowerCase().replaceAll("\\s+", "")); imagePath = Normalizer.normalize(imagePath, Normalizer.Form.NFD); imagePath = imagePath.replaceAll("[^\\x00-\\x7F]", ""); } else { imagePath = "resources/cards/war_carta_coringa.png"; } ImageIcon cardImage = new ImageIcon(imagePath); Image resizedImage = cardImage .getImage() .getScaledInstance(cardLabel.getWidth(), cardLabel.getHeight(), Image.SCALE_SMOOTH); cardLabel.setIcon(new ImageIcon(resizedImage)); this.cards.put(cardLabel, c); this.cardDisplayPanel.add(cardLabel); } String exchangeCardsButtonText = String.format( "Exchange cards for %d armies", WarGame.getInstance().getCardExchangeArmyCount()); if (WarGame.getInstance().isAttacking()) { exchangeCardsButtonText = String.format("Take these cards from %s", p.getName()); } this.exchangeCardsButton = new JButton(exchangeCardsButtonText); ActionListener exchangeCardsListener = new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { WarGame.getInstance().exchangeCards(selectedCards); dispose(); } }; this.exchangeCardsButton.addActionListener(exchangeCardsListener); this.exchangeCardsButton.setEnabled(false); this.getContentPane().add(this.cardDisplayPanel, BorderLayout.CENTER); this.getContentPane().add(this.exchangeCardsButton, BorderLayout.PAGE_END); }