Setting graphics of a Labeled does not show the Label correctly
John Hendrikx
john.hendrikx at gmail.com
Thu Dec 1 13:46:44 UTC 2022
Setting the same Node for multiple graphics is not allowed. Your
program should IMHO throw "IllegalArgumentException" on the 2nd click.
* An optional icon for the Labeled. This can be positioned
relative to the
* text by using {@link #setContentDisplay}. The node specified
for this
* variable cannot appear elsewhere in the scene graph, otherwise
* the {@code IllegalArgumentException} is thrown. See the class
* description of {@link Node} for more detail.
--John
On 01/12/2022 13:38, Nir Lisker wrote:
> That's my point. Currently, a node can serve as the graphics property
> for multiple Labels, but will appear only in 1 because it can only
> have a single parent in the scenegraph. While this is technically
> fine, it causes issues like the one I showed above. I'm not sure if a
> node is supposed to be able to serve as multiple graphics (and
> displayed only in the last Label it was set to?), or removed from
> other Labels' graphic properties just like is done for children in the
> scenegraph. Personally, I find it confusing that label.getGraphics()
> will return a node that isn't shown in that label.
>
> On Thu, Dec 1, 2022 at 2:21 PM John Hendrikx <john.hendrikx at gmail.com>
> wrote:
>
> Internally the graphics is just a child node, and nodes can't be
> part of
> the scene graph twice (this is done in LabeledSkinBase).
>
> It showing up only once is probably because it is getting removed
> from
> the other labels.
>
> I think things are probably getting out of sync, where the graphics
> property may think it still has a certain node as its graphics,
> but it
> is no longer a child of the label.
>
> --John
>
> On 01/12/2022 11:23, Nir Lisker wrote:
> > Hi,
> >
> > Given the following code
> >
> > var cb1 = new Label("1");
> > var cb2 = new Label ("2");
> > var b1 = new Button("A");
> > cb1.setGraphic(b1);
> > b1.setOnAction(e -> {
> > if (b1.getParent() == cb1) {
> > // cb1.setGraphic(null);
> > cb2.setGraphic(b1);
> > } else {
> > // cb2.setGraphic(null);
> > cb1.setGraphic(b1);
> > }
> > });
> >
> > Pressing the first button will move it (the graphic) to the second
> > label, however, pressing it again will not move it back to the
> first
> > label. It's required to set the graphics to null prior to moving
> them
> > as in the commented lines. This looks like a bug to me. I would
> think
> > that when a graphic is moved, it will appear in its new label
> > immediately, like moving a child. Apparently a single node can
> be the
> > graphics for multiple Labeled nodes, but it will appear only in
> 1. Is
> > this intentional?
> >
> > - Nir
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20221201/e0bb2a38/attachment-0001.htm>
More information about the openjfx-dev
mailing list