"Ticker" for game timing
This is one of the cleanest code I have come across in a while. Congrats to your lovely, well-written code!

Just some points:


I don't like seeing this:

public class Ticker {
    private long lastTick;
    // ...
    }
}


It is more readable (IMO) when you put spaces after the beginning and before the end:

public class Ticker {

    private long lastTick;
    // ...
    }

}


I don't see a reason why not to do so, as the rest of your code is very well spaced.
This method:

public boolean update() {
    long currentTime = System.currentTimeMillis();

    if (currentTime &gt;= nextTick) {
        long targetTimeDelta = 1000L / tickRate;

        if (lastTick == 0 || nextTick == 0) {
            lastTick = currentTime - targetTimeDelta;
            nextTick = currentTime;
        }

        float deltaTime = (float) (currentTime - lastTick) / targetTimeDelta;

        for (TickListener listener : tickListeners) {
            listener.onTick(deltaTime);
        }

        lastTick = currentTime;
        nextTick = currentTime + targetTimeDelta;

        return true;
    }

    return false;
}


Just my opinion, but I feel uncomfortable with that many spaces in code. The only place I would use spaces would be:


Between Node declarations in JavaFX, or JWhatever declarations in Swing.
Where there is an obvious change in what the code will do.


So it would be more like:

public boolean update() {
    long currentTime = System.currentTimeMillis();
    if (currentTime &gt;= nextTick) {
        long targetTimeDelta = 1000L / tickRate;
        if (lastTick == 0 || nextTick == 0) {
            lastTick = currentTime - targetTimeDelta;
            nextTick = currentTime;
        }

        float deltaTime = (float) (currentTime - lastTick) / targetTimeDelta;
        for (TickListener listener : tickListeners) {
            listener.onTick(deltaTime);
        }

        lastTick = currentTime;
        nextTick = currentTime + targetTimeDelta;
        return true;
    }
    return false;
}