In the past (JavaFX 2.2-), I've recommended very strongly against constructing 
custom controls because:

   a. For many applications it's more complicated than needed (e.g. custom 
controls are usually best for reusable libraries but not application code).
   b. The public API and documentation to define custom controls wasn't really 

For (b),
   On the documentation side, there is now stuff available at
   On the public API side there is now a more complete public API to support 
custom controls in Java 8.
   There are lots of great open source demos of how to create controls in the 
openjfx source base itself.

Many times in application code, simple composition of existing controls via 
layout managers will continue to be the most appropriate way to build an 
application.  But there are times when defining a custom control makes more 
sense (e.g. to take advantage of the design patterns and functionality offered 
by the control API or to neatly define a reusable component).

I know the Behaviour API stuff is currently still private API, but if the 
Behaviour API is avoided, would you now advise writing custom controls in 
JavaFX 8?  
If so, would it only be when you are contributing controls to a reusable 
library like jfxtras or controlsfx, or would you also recommend creating custom 
controls for use in general application code?


-----Original Message-----
[] On Behalf Of Jonathan Giles
Sent: Wednesday, December 04, 2013 5:12 PM
To: Pedro Duque Vieira
Cc: OpenJFX Mailing List
Subject: Re: Creating a type of toggle with two labels..

It's a toss-up between minimising duplicated code or having to bend API and 
implementation to your will (and end up with API you don't necessarily want in 
the process).

Very rarely would I suggest extending a control - only when the API matches 
perfectly with what you're doing, and then that really means all you're doing 
is a custom skin anyway. More often than not it makes more sense to follow the 
famous advice of preferring composition over inheritance, and when that fails 
just bite the bullet and roll your own using the base Control API (if you want 
a reusable and skinnable / stylable control) or Region (if you don't need to be 

-- Jonathan

On 5/12/2013 11:05 a.m., Pedro Duque Vieira wrote:
> OK, sounds reasonable. Too bad about the code duplication that will 
> need to take place.
> Thanks Jonathan and thanks for the link.
> Regards,
> On Wed, Dec 4, 2013 at 9:39 PM, Jonathan Giles 
> < <>> wrote:
>     It is likely significantly easier to simply roll your own control and
>     not try to coerce ButtonBase to support two labels.
>     For what it is worth, Paru and I talked about precisely this
>     control at
>     JavaOne 2012, which you can watch on YouTube here:
> q5SgxL961IFE&index=38
>     -- Jonathan
>     On 5/12/2013 10:16 a.m., Pedro Duque Vieira wrote:
>     > Hi,
>     >
>     > I'm trying to create a new control to be used by other
>     developers. It is
>     > know as "Toggle Switch".
>     > You can see this control in android:
>     > in iOS:
>     > (search for "Toggle
>     Switch") and
>     > on Windows 8:
>     >
>     > (below
>     > "Step 2").
>     >
>     > My approach was to subclass ButtonBase which is itself a subclass of
>     > Labeled. The problem here is that Labeled only accepts one label
>     but the
>     > Toggle Switch needs two: one for the "on" state and another for
>     the "off".
>     >
>     > Any ideas on how to best approach this problem?
>     >
>     > Thanks in advance, regards,
>     >
> --
> Pedro Duque Vieira

Reply via email to