Double skin addition
Tomas Mikula
tomas.mikula at gmail.com
Wed Jun 11 11:16:05 UTC 2014
Hi Randahl,
you should override your Skin's dispose() method that removes the label.
Possible reasons I can imagine why JavaFX does not clear the child list itself:
1. The control could have some children on it's own, which shouldn't
be deleted when applying a skin. This will be the case for a control
that does not have a default skin.
2. Some third party code may add some nodes (e.g. a lightweight popup
or a "close" button) to your control. These should not be removed when
switching skins either.
Regards,
Tomas
On Wed, Jun 11, 2014 at 9:57 AM, Randahl Fink Isaksen <randahl at rockit.dk> wrote:
> I have noticed that if I create a skin which adds a label like this
>
> public MySkin(MyControl control) {
> super(control);
> pane.getChildren().add(label);
> getChildren().add(pane);
> }
>
> the label is actually added twice in my application. I suspect this is because I am switching style sheets during startup, which means my createDefaultSkin method might be invoked twice.
>
> I found out, I can easily solve this by changing my code to using a getChildren().setAll(label) rather than getChildren().add(label), but I am surprised that JavaFX would not by itself clear the control’s children when applying a new skin.
>
> Has anyone else experienced this?
>
> Thanks
>
> Randahl
More information about the openjfx-dev
mailing list