I would say to have things done correctly🙂 I don’t really know if it is much better than always use runLater. I could imagine that it is more efficient by avoiding the JavaFX platform to “queue” that event. I think that if you redraw one thing at a time it should be okay, but if you have a lot of updates to make, I think it would avoid useless treatments for the platform. Maybe Jonathan is much more able to answer to your question🙂

static public void invokeLater(Runnable runnable)
{
// if this is the AWT thread, just run it
if (EventQueue.isDispatchThread() ) runnable.run();
else
{
// this is not the AWT thread, hand it over
javax.swing.SwingUtilities.invokeLater( runnable );
}
}

My opinion is that you only want to put things into the runLater queue if you need to. If you are already on the JavaFX application thread then you should not queue the runnable up, and instead perform it immediately. It is generally the advice in UI toolkits to not put too much on the queue as it can result in pulses that are too slow to keep up the expected frame rate.

Interesting arguments. OTOH the method now has a delaying effect on the current pulse, so that could be a poteto potato thingy. Plus it has a duality; changes may be immediate, or they may not. Anyhow, not too relevant I guess.