/** Overrides the paintComponent method to paint the horses images in their proper position. */ @Override public synchronized void paintComponent(Graphics g) { // Draw the six images of the horses for (int i = 0; i < horsesPoint.size(); i++) { Image image = horsesImage.get(i); Interpolator<Object> interpolator = horsesPoint.get(i); g.drawImage(image, interpolator.getXPosition(), interpolator.getYPosition(), 25, 25, null); } // Draw the images of the bets for (Interpolator<BetContainer> b : betsPoint) { Image image = b.getObject().getBet().getBetToken().getImage(); Interpolator<BetContainer> interpolator = b; g.drawImage(image, interpolator.getXPosition(), interpolator.getYPosition(), 40, 40, null); String danari = String.format("%d$", b.getObject().getBet().getValue()); try { g.setColor(Color.BLACK); g.setFont(font.deriveFont(15F)); } catch (NullPointerException e) { // Font not loaded } g.drawString( b.getObject().getPlayerName(), interpolator.getXPosition(), interpolator.getYPosition() + 51); g.drawString(danari, interpolator.getXPosition(), interpolator.getYPosition() + 65); } super.paintComponent(g); }
/** * Computes the interpolation of the new bets. * * @param bets */ public synchronized void updateBets(List<BetContainer> bets) { // Add bets not in the list betsPoint for (BetContainer betContainer : bets) { boolean found = false; for (Interpolator<BetContainer> b : betsPoint) { if (b.getObject().equals(betContainer)) { found = true; } } if (!found) { betsPoint.add( new Interpolator<BetContainer>( baseX(betContainer.getBet().getBetToken().getStable() - 1, BET_Y_POSITION) - 10, BET_Y_POSITION, betContainer)); } } // Remove bets in the list betsPoint that are not in bets Iterator<Interpolator<BetContainer>> bIter = betsPoint.iterator(); while (bIter.hasNext()) { Interpolator<BetContainer> b = bIter.next(); boolean found = false; for (BetContainer betContainer : bets) { if (b.getObject().equals(betContainer)) { found = true; } } if (!found) { bIter.remove(); } } // Check if there's more than one interpolator overlapped and move them boolean overlap = false; do { overlap = false; for (Interpolator<BetContainer> i1 : betsPoint) { for (Interpolator<BetContainer> i2 : betsPoint) { if (i1 != i2 && Math.abs(i1.destination.x - i2.destination.x) < 20 && Math.abs(i1.destination.y - i2.destination.y) < 45) { i1.setNewPosition(i1.destination.x, i1.destination.y + 30, 1000); i2.setNewPosition(i2.destination.x, i2.destination.y - 30, 1000); i1.start(); i2.start(); overlap = true; } } } } while (overlap); }