Question: Help with add a function in the below Java code, so when click on a card and then click in the panel, the card moves
Help with add a function in the below Java code, so when click on a card and then click in the panel, the card moves to that place. class DrawingPanel extends JPanel implements MouseListener, MouseMotionListener
private final ArrayList deck;
private final ArrayList throwawayPile;
private Card selectedCard;
private Point lastMousePosition;
private final CardPile newPile;
private Card card;
private int width;
private int height;
public DrawingPanel
deck new ArrayList;
throwawayPile new ArrayList;
addMouseListenerthis;
addMouseMotionListenerthis;
clear;
int width ;
int height ;
CardPileMiddle centerPile new CardPileMiddle Color.YELLOW
@Override
public void mouseDraggedMouseEvent e
@Override
public void mouseReleasedMouseEvent e
;
newPile new CardPile Color.GRAY
@Override
public boolean dropCardIfContainsPoint mousePoint, Card card
return false;
@Override
public void placeCardCard card
;
this.addcenterPile;
private void initializeDeck
deck.clear;
String suits HjRuKlSp;
String ranks EssKnQK;
int xOffset ;
int yOffset ;
int cardWidth ;
int cardHeight ;
for String suit : suits
for String rank : ranks
deck.addnew CardxOffset yOffset, cardWidth, cardHeight, Color.BLACK, rank, suit;
shuffleDeck;
@Override
protected void paintComponentGraphics g
super.paintComponentg;
for Card card : deck
if card.equalsselectedCard
card.drawg;
for Card card : throwawayPile
if card.equalsselectedCard
card.drawg;
if selectedCard null
selectedCard.drawg;
newPile.drawg;
public void clear
if decksize
deck.subListclear;
repaint;
public void displayFourCards
clear;
initializeDeck;
CardUtil.displayFourCardsdeck;
int componentCount this.getComponentCount;
for int i ; i ; i
if componentCount i
this.setComponentZOrderthisgetComponentcomponentCount i i;
throwawayPile.clear;
repaint;
@Override
public void mouseClickedMouseEvent e
Point mousePoint egetPoint;
if newPilecontainsmousePoint
newPile.removeTopCard;
repaint;
return;
if selectedCard null selectedCard.containsmousePoint
for int i deck.size; i ; i
if deckgeticontainsmousePoint
Card clickedCard deck.geti;
if clickedCard.equalsselectedCard
selectedCard clickedCard;
clickedCard.toggleDenomination;
moveCardToThrowawayPileclickedCard;
deck.removei;
deckaddclickedCard;
repaint;
break;
if newPilecontainsmousePoint
newPile.removeTopCard;
repaint;
return;
for int i throwawayPile.size; i ; i
if throwawayPilegeticontainsmousePoint
selectedCard throwawayPile.geti;
lastMousePosition mousePoint;
newPile.moveTopCardTolastMousePosition;
lastMousePosition null;
repaint;
return;
if lastMousePosition null
newPile.moveTopCardTolastMousePosition;
lastMousePosition null;
repaint;
if selectedCard null
if newPile.containsegetPoint
selectedCard.moveegetX selectedCard.width egetY selectedCard.height ;
else
newPile.addCardselectedCard;
throwawayPile.removeselectedCard;
selectedCard null;
repaint;
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
