Developing controls based on Canvas?

Felix Bembrick felix.bembrick at
Mon Aug 5 03:11:58 PDT 2013

I am investigating the feasibility of developing a JavaFX 8 control based
on Canvas.  I have chosen Canvas as the base class as this control is of a
very dynamic nature and would not be easy to implement with a retained mode
style ancestor (at least as far as I can tell).

So is this feasible?  While I can readily see how to render the visual
aspects of the control, I am not sure how to best "embed" other controls
within it should that become necessary (and almost certainly will).

For example, how would I go about embedding a Button within my control?  It
looks to me like I would need to create an actual Button node somewhere
else in the scenegraph and then perhaps render it within my control using
gc.drawImage() passing in a snapshot of the Button node.  That's OK but
then I have to somehow handle events and I am not sure how best to do that.

Another issue I see is that there seems to be no way to apply effects to
individual graphic elements within the Canvas as the applyEffect() method
applies to the entire Canvas.

Finally, a significant obstacle is this issue:

This issue relates to the lack of support for LCD font smoothing within
Canvas.  This may not sound that serious but the difference between LCD
font-smoothed text in other controls and the grey-scale text in Canvas is
so distinct on my current machine that a control based on Canvas would
really stick out like a sore thumb and appear significantly less appealing
than a "standard" control.

So, am I wasting my time?
Are there any other issues I am likely to face?
Are there other ways to develop dynamic controls which may involve
thousands of nodes (such as lines, curves etc.)?



More information about the openjfx-dev mailing list