Proposal: Avoiding nested views with a merge tag
Danno Ferrin
danno.ferrin at shemnon.com
Mon Dec 17 08:51:04 PST 2012
I think what is needed is to use the fx:root element on the FXML to be
merged and set the parent VBox on the FXMLLoader via the setRoot method.
I'de hack out a trial but I'm at work currently.
On Mon, Dec 17, 2012 at 9:44 AM, Yennick Trevels
<yennick.trevels at gmail.com>wrote:
> Indeed, that's it. Which in return should increase performance since the
> tree would contain a smaller number of levels (so less layout code that
> needs to be executed). This performance is important for desktop
> applications, but even more if/when JavaFx is going mobile.
>
>
> On Mon, Dec 17, 2012 at 5:42 PM, Richard Bair <richard.bair at oracle.com
> >wrote:
>
> > I see, basically what you want is a fragment in some secondary XML file,
> > and since XML requires a root, you want a root which isn't a node so as
> to
> > make XML happy. Is that right?
> >
> >
> > On Dec 17, 2012, at 8:28 AM, Yennick Trevels <yennick.trevels at gmail.com>
> > wrote:
> >
> > ListView isn't what I'm looking for. It's more about a general way to
> > reduce the number of levels in the scene graph (which I called display
> > list). The blog post I mentioned describes quite clearly what I'm aiming
> it.
> >
> > For example when you have the following:
> >
> > <?xml version="1.0" encoding="UTF-8"?><VBox xmlns:fx="
> http://javafx.com/fxml">
> > <children>
> > <MyComponent />
> > </children></VBox>
> >
> >
> >
> > *MyComponent.fxml:*
> >
> > <?xml version="1.0" encoding="UTF-8"?><VBox xmlns:fx="
> http://javafx.com/fxml">
> > <children>
> > <TextField />
> > <Button />
> > </children></VBox>
> >
> >
> > This would create the following tree in the scene graph:
> > VBox
> > |---->VBox
> > |----->TextField
> > |----->Button
> >
> > So basically the child VBox is unnecessary and only creates an extra
> level
> > in the scene graph without adding any functionality because the TextField
> > and Button would already be aligned vertically by the top VBox. That's
> > where the merge tag comes in which could replace the VBox tag in the
> > MyComponent.fxml view. Then the tree would look like this:
> >
> > VBox
> > |----->TextField
> > |----->Button
> >
> >
> > I hope this explains it somewhat clearly :)
> >
> >
> > On Mon, Dec 17, 2012 at 4:43 PM, Richard Bair <richard.bair at oracle.com
> >wrote:
> >
> >> In fx there is not a display list, and nodes cannot be repeated in the
> >> scene graph, so you have to have the duplicate hbox.
> >>
> >> ListView is a powerful tool for doing virtualized views, maybe that is
> >> what you need? What is the use case?
> >>
> >> On Dec 17, 2012, at 7:03 AM, Yennick Trevels <yennick.trevels at gmail.com
> >
> >> wrote:
> >>
> >> > But if I understand this tag correctly it will still create an
> instance
> >> of
> >> > HBox? So this root tag will still create a container (which will be
> >> added
> >> > as a Node to the displaylist), which may be unnecessary.
> >> > Is it possible with this tag to not create a node in the displaylist,
> so
> >> > that elements defined under the root tag are added to the container in
> >> > which the fxml view is being used?
> >> >
> >> >
> >> > On Mon, Dec 17, 2012 at 3:45 PM, Tom Schindl <
> >> tom.schindl at bestsolution.at>wrote:
> >> >
> >> >> Isn't that what
> >> >>
> >> >> <fx:root xmlns:fx="http://javafx.com/fxml" type="HBox">
> >> >> </fx:root>
> >> >>
> >> >> is good for?
> >> >>
> >> >> Tom
> >> >>
> >> >> Am 17.12.12 15:40, schrieb Yennick Trevels:
> >> >>> One of the most common performance problems in RIA frameworks is
> >> having a
> >> >>> deeply nested component tree. One of the reasons is the use of xml
> for
> >> >>> declaring the layout (fxml in case of JavaFx). The problem with xml
> is
> >> >> that
> >> >>> when you want to group multiple components in a separate fxml for
> >> reuse
> >> >>> purposes, you have to define a root tag, which in most frameworks
> will
> >> >>> create an extra (potentially unnecessary) node in the displaylist.
> >> >>>
> >> >>> The way Android has solved this is by using a <merge> tag, which
> >> doesn't
> >> >>> create an extra node in the displayList. A good overview of this tag
> >> can
> >> >> be
> >> >>> found here:
> >> >>
> >>
> http://android-developers.blogspot.com/2009/03/android-layout-tricks-3-optimize-by.html
> >> >>>
> >> >>> Imo such a tag is something which can also be very useful for JavaFx
> >> >> since
> >> >>> it's also node-based, certainly since performance is key in RIA
> >> >>> applications.
> >> >>>
> >> >>> Is something like this already in development and if not, what are
> >> your
> >> >>> thoughts about this?
> >> >>>
> >> >>>
> >> >>> Greetz,
> >> >>> Yennick
> >> >>
> >> >>
> >> >> --
> >> >> B e s t S o l u t i o n . a t EDV Systemhaus
> >> GmbH
> >> >>
> >> ------------------------------------------------------------------------
> >> >> tom schindl geschäftsführer/CEO
> >> >>
> >> ------------------------------------------------------------------------
> >> >> eduard-bodem-gasse 5-7/1 A-6020 innsbruck fax ++43 512
> >> 935833
> >> >> http://www.BestSolution.at phone ++43 512
> >> 935834
> >> >>
> >>
> >
> >
>
--
There is nothing that will hold me back. I know who I am....
I remember wher I came from, and I feel stronger for knowing.
Zane, Ninja of Ice. Ninjago S01E07
More information about the openjfx-dev
mailing list