Setting graphics of a Labeled does not show the Label correctly

John Hendrikx john.hendrikx at gmail.com
Thu Dec 1 13:49:19 UTC 2022


Sorry, I meant on the first click already.

--John

On 01/12/2022 14:46, John Hendrikx wrote:
>
> 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/41137e57/attachment.htm>


More information about the openjfx-dev mailing list