<Swing Dev> RFR: 8272148: JDesktopPane:getComponentCount() returns one extra than expected with GTKLookAndFeel
Phil Race
prr at openjdk.java.net
Mon Aug 23 17:08:28 UTC 2021
On Mon, 16 Aug 2021 08:22:35 GMT, Pankaj Bansal <pbansal at openjdk.org> wrote:
> A container may include few default components as children, which are added to it during creation. Due to this, calling function getChildrenCount on a new created instance may return non zero value. This behaviour may vary according to L&F also, as some L&F may add some default components to a container, but other L&F may choose not to do so.
>
> The current bugs reports that this behaviour looks suspicious as it is expected that a newly created container will have zero children.
>
> Current specification is not clear on this whether it is allowed for a container to contain default components or not. The fix make changes to the specification to clarify the same.
>
> Note: I think this will need a CSR, I will file one after the review is completed
> > I wonder how the other components handle that. For example, the JComboBox in Aqua L&F is a "compound" element and it contains a text field and button, what does the "getComponentCount" return in that case, wIll we hide internal data from the user?
>
> I just ran the following test for JComboBox for all L&Fs on my Mac. It fails for everyone of them. The test and output is as below. Looks like this test is not being run for all components for all L&Fs. It should give lot of failures I guess.
Yep not unexpected which is why I said this needed to be documented at least as high up as JComponent.
And FWIW since nothing said that JComponents are created with no children it is a very weak bug/complaint to begin with !
src/java.desktop/share/classes/javax/swing/JComponent.java line 185:
> 183: * <p>
> 184: * Containers inherited from <code>JComponent</code> can contain any
> 185: * number of default components as children. This behaviour can also
can we say "default or initial"
src/java.desktop/share/classes/javax/swing/JComponent.java line 188:
> 186: * change according to look and feel, as some look and feels may add a
> 187: * default component to a container, where as other look and feels may
> 188: * choose not to do so.
"a" is not "any number" so you need to make your wording consistent.
Also I think you need to say that even for a specific L&F it may vary depending on configuration properties of the
JComponent.
And perhaps finish with
"In summary, it is not valid to assume a JComponent has no children just because the application did not directly add them" ?
-------------
PR: https://git.openjdk.java.net/jdk/pull/5121
More information about the swing-dev
mailing list