Event when CSS is applied
Tom Eugelink
tbee at tbee.org
Thu Feb 19 07:20:31 UTC 2015
(after a night's sleep)
Well... I was trying to do things by composition and it did not work. My implemention worked, but it had to depend on a layoutChildren, only at the top level (Skin), which was not fine grained enough.
Interesting is that for JFXtras Agenda I used the inherit pattern, but because Agenda has a lot of nested layout (week -> day -> appointment -> time, title, ...). Inheritance was used there out of a need for encapsulation; the composition code got very complex. But it probably saved me from a lot of CSS and layout woos.
Now, back to the gauge, I just tried to see if I could hammer a composition pattern onto NeedlePane. The separation between construction and layout is a good thing, so I ended up doing this:
- Removing the whole NeedlePane class and replace it with a "Pane needlePane = new Pane();" since we're doing absolute layout.
- Convert the constructor to a method "private void constructNeedlePane()"
- Convert the layoutChildren to a method "private void layoutNeedlePane()"
- Then I tried to wire it up by listening to "needlePane.needsLayoutProperty()"
That did not work... It worked partially, which was weird.
What of course did work was hooking into layoutChildren():
final private Pane needlePane = new Pane() {
@Override
protected void layoutChildren() {
super.layoutChildren();
layoutNeedlePane();
}
};
So, now I have composed the layout with a smallish hack. But, getting back to my remark on Agenda... Encapsulation was a good thing there, and actually I like using "extends" (I always complain when things are final, and I cannot override). So I'm not too displeased with what we ended up with. ;-)
Tom
On 18-2-2015 22:50, Tomas Mikula wrote:
> Hmm, my view is rather reverse to yours:
> The fact that the implementation of layout is best solved with
> inheritance is a sign that JavaFX does _not_ aim enough at doing
> things via composition.
>
> Tomas
>
> On Wed, Feb 18, 2015 at 4:37 PM, Tom Eugelink <tbee at tbee.org> wrote:
>>
>> On 18-2-2015 21:49, Tomas Mikula wrote:
>>> So back to your original question:
>>>
>>>> Basically I would like to be informed when the styling of a node has been
>>>> applied or changed. Is there some place that can provide this information?
>>> Turns out you don't actually need this information ;)
>>>
>>
>> Indeed. Pattern learned.
>>
>> What does surprise me is that JavaFX aims at doing things via composition,
>> that is why almost everything is final, and where the structure in my
>> original code comes from. This turns out is best solved with inheritance.
>>
>> Tom
>>
More information about the openjfx-dev
mailing list