Extending Builders: Layout Builders
Richard Bair
richard.bair at oracle.com
Wed Nov 21 00:46:24 PST 2012
I wanted constraint classes from the start. There was a problem there, which I don't accurately remember now, but I do want to see some discussion around deprecating (or at least no longer depending on) the static methods and having some constraint classes again.
Richard
On Nov 21, 2012, at 9:38 AM, Tom Eugelink <tbee at tbee.org> wrote:
> Another approach would be to introduce formal constraint classes. I've blogged about this and wrote three test classes (HBox, VBox and GridPane).
>
> http://tbeernot.wordpress.com/2012/11/10/javafx-layout-a-silver-lining/
>
> The exact API is under debate. However, the advantage of using explicit constraint classes is that you'll not only lose the weird static methods, but it is also possible to specify different constraints for all layouts that a node may become a child of (because of animation). The current approach of having a constraint map in a node is questionable; who says that if I want valigment=left in one layout, I also want that in another?
>
> Tom
>
>
> On 2012-07-12 16:20, Eva Krejcirova wrote:
>> Hi,
>>
>> I would like to add following methods to our layout builders. Similar convenience methods are present in their respective layout classes:
>>
>> *GridPaneBuilder*
>> addColumn(int columnIndex, Node... children)
>> addRow(int rowIndex, Node... children)
>> add(Node child, int columnIndex, int rowIndex)
>> add(Node child, int columnIndex, int rowIndex, int colspan, int rowspan)
>>
>> *RegionBuilder*
>> maxSize(double width, double height)
>> minSize(double width, double height)
>> prefSize(double width, double height)
>> These will be inherited by all layout builders.
>>
>> A also propose to add following convenience methods which don't have direct counterpart in layout classes (the constraints can be specified only by static methods there)
>> Adding these would enable us to add child with constraint to layout without having to hold a reference to it. e.g
>> Hbox h = HBoxBuilder.create().add(CircleBuilder.create...build(), margin).build();
>> instead of
>> Circle circle = CircleBuilder.create...build();
>> Hbox h = HBoxBuilder.create().children(circle).build();
>> Hbox.setMargin (circle, margin);
>>
>> The proposed methods are:
>> *AnchorPaneBuilder*
>> add(Node child, Double topAnchor, Double rightAnchor, Double bottomAnchor, Double leftAnchor)
>>
>> *BorderPaneBuilder*
>> add(Node child, Pos alignment)
>> add(Node child, Insets margin)
>> add(Node child, Pos alignment, Insets margin)
>>
>> *FlowPaneBuilder*
>> add(Node child, Insets margin)
>>
>> *GridPaneBuilder*
>> add(Node child, int columnIndex, int rowIndex, int columnspan, int rowspan, HPos halignment, VPos valignment)
>> add(Node child, int columnIndex, int rowIndex, int columnspan, int rowspan, HPos halignment, VPos valignment, Priority hgrow, Priority vgrow)
>> add(Node child, int columnIndex, int rowIndex, int columnspan, int rowspan, HPos halignment, VPos valignment, Priority hgrow, Priority vgrow, Insets margin)
>>
>> *HBoxBuilder*
>> add(Node child, Priority hgrow)
>> add(Node child, Insets margin)
>> add(Node child, Priority hgrow, Insets margin)
>>
>> *StackPaneBuilder*
>> add(Node child, Pos alignment)
>> add(Node child, Insets margin)
>> add(Node child, Pos alignment, Insets margin)
>>
>> *TilePaneBuilder*
>> add(Node child, Pos alignment)
>> add(Node child, Insets margin)
>> add(Node child, Pos alignment, Insets margin)
>>
>> *VBoxBuilder*
>> add(Node child, Priority vgrow)
>> add(Node child, Insets margin)
>> add(Node child, Priority vgrow, Insets margin)
>>
>> Thanks,
>> Eva
>
More information about the openjfx-dev
mailing list