package eu.hgross.blaubot.fingertracking; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.util.ArrayList; import java.util.List; import java.util.Timer; import java.util.TimerTask; import javax.swing.JPanel; import eu.hgross.blaubot.fingertracking.model.Finger; /** * */ public class FingerField extends JPanel { private static final long REFRESH_INTERVAL = 50; private volatile List<Finger> fingers = new ArrayList<>(); private volatile List<Finger> lastFingers = null; private Timer timer; private TimerTask timerTask; private int height; private int width; public FingerField() { this.timer = new Timer(); this.timerTask = new TimerTask() { @Override public void run() { if(fingers == lastFingers) return; repaint(); } }; this.timer.scheduleAtFixedRate(timerTask, REFRESH_INTERVAL, REFRESH_INTERVAL); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); this.width = this.getWidth(); this.height = this.getHeight(); //g.clearRect(0, 0, width, height); lastFingers = fingers; g.setColor(Color.black); g.fillRect(0, 0, width, height); drawFingers(g); } private void drawFingers(Graphics canvas) { for(Finger f : fingers) { drawFinger(f, canvas); } } private void drawFinger(Finger f, Graphics canvas) { int FINGER_RADIUS = width/20; int x = (int)(width * f.getX()); int y = (int)(height * f.getY()); // draw shape canvas.setColor(new Color(f.getColor(), true)); canvas.fillArc(x-FINGER_RADIUS/2,y-FINGER_RADIUS/2, FINGER_RADIUS, FINGER_RADIUS, 0,360); } @Override public Dimension getMinimumSize() { return new Dimension(100,200); } public void setFingers(List<Finger> fingers) { this.fingers = fingers; } }