Эх сурвалжийг харах

:sparkles: Added fluent API builders for MaterialFX components and JavaFX panes, as requested by #78

Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
palexdev 3 жил өмнө
parent
commit
c450e1660d
52 өөрчлөгдсөн 5220 нэмэгдсэн , 0 устгасан
  1. 1 0
      CHANGELOG.md
  2. 85 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/base/BaseListViewBuilder.java
  3. 53 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/base/BaseProgressBuilder.java
  4. 61 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/base/BaseToggleNodeBuilder.java
  5. 61 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/base/ButtonBaseBuilder.java
  6. 58 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/base/ControlBuilder.java
  7. 25 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/base/INodeBuilder.java
  8. 116 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/base/LabeledBuilder.java
  9. 101 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/ButtonBuilder.java
  10. 79 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/CheckBoxBuilder.java
  11. 116 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/CheckListBuilder.java
  12. 64 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/CircleToggleNodeBuilder.java
  13. 170 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/ComboBuilder.java
  14. 150 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/DatePickerBuilder.java
  15. 81 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/FilterComboBuilder.java
  16. 91 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/FilterPaneBuilder.java
  17. 98 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/IconBuilder.java
  18. 116 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/ListBuilder.java
  19. 118 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/MagnifierBuilder.java
  20. 232 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/NotificationCenterBuilder.java
  21. 67 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/PaginatedTableBuilder.java
  22. 94 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/PaginationBuilder.java
  23. 71 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/PasswordFieldBuilder.java
  24. 108 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/PopupBuilder.java
  25. 72 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/ProgressBarBuilder.java
  26. 98 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/ProgressSpinnerBuilder.java
  27. 85 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/RadioBuilder.java
  28. 54 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/RectangleToggleNodeBuilder.java
  29. 152 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/ScrollPaneBuilder.java
  30. 173 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/SliderBuilder.java
  31. 144 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/StepperBuilder.java
  32. 96 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/StepperToggleBuilder.java
  33. 176 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/TableBuilder.java
  34. 73 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/TableColumnBuilder.java
  35. 149 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/TextFieldBuilder.java
  36. 108 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/ToggleBuilder.java
  37. 125 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/TooltipBuilder.java
  38. 82 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/AnchorPaneBuilder.java
  39. 77 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/BackgroundBuilder.java
  40. 69 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/BorderBuilder.java
  41. 89 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/BorderPaneBuilder.java
  42. 93 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/FlowPaneBuilder.java
  43. 200 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/GridPaneBuilder.java
  44. 81 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/HBoxBuilder.java
  45. 229 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/NodeBuilder.java
  46. 63 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/PaneBuilder.java
  47. 53 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/ParentBuilder.java
  48. 136 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/RegionBuilder.java
  49. 70 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/StackPaneBuilder.java
  50. 105 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/TilePaneBuilder.java
  51. 81 0
      materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/VBoxBuilder.java
  52. 71 0
      materialfx/src/main/java/io/github/palexdev/materialfx/factories/CornerRadiusFactory.java

+ 1 - 0
CHANGELOG.md

@@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 - ColorUtils: added some new methods to convert Colors to Strings
 - FunctionalStringConverter: added two new convenience methods
 - New utils class SwingFXUtils (copied from javafx.embed.swing)
+- Added fluent API builders for MaterialFX components and JavaFX Panes, as requested by #78
 
 ### Changed
 - ColorUtils: changed some method to be null-safe

+ 85 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/base/BaseListViewBuilder.java

@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.base;
+
+import io.github.palexdev.materialfx.controls.base.AbstractMFXListView;
+import io.github.palexdev.materialfx.effects.DepthLevel;
+import io.github.palexdev.virtualizedfx.cell.Cell;
+import javafx.collections.ObservableList;
+import javafx.scene.paint.Paint;
+import javafx.util.Duration;
+import javafx.util.StringConverter;
+
+public class BaseListViewBuilder<T, C extends Cell<T>, L extends AbstractMFXListView<T, C>> extends ControlBuilder<L> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public BaseListViewBuilder(L control) {
+		super(control);
+	}
+
+	public static <T, C extends Cell<T>> BaseListViewBuilder<T, C, AbstractMFXListView<T, C>> baseList(AbstractMFXListView<T, C> list) {
+		return new BaseListViewBuilder<>(list);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public BaseListViewBuilder<T, C, L> setTrackColor(Paint trackColor) {
+		node.setTrackColor(trackColor);
+		return this;
+	}
+
+	public BaseListViewBuilder<T, C, L> setThumbColor(Paint thumbColor) {
+		node.setThumbColor(thumbColor);
+		return this;
+	}
+
+	public BaseListViewBuilder<T, C, L> setThumbHoverColor(Paint thumbHoverColor) {
+		node.setThumbHoverColor(thumbHoverColor);
+		return this;
+	}
+
+	public BaseListViewBuilder<T, C, L> setHideAfter(Duration hideAfter) {
+		node.setHideAfter(hideAfter);
+		return this;
+	}
+
+	public BaseListViewBuilder<T, C, L> setItems(ObservableList<T> items) {
+		node.setItems(items);
+		return this;
+	}
+
+	public BaseListViewBuilder<T, C, L> setConverter(StringConverter<T> converter) {
+		node.setConverter(converter);
+		return this;
+	}
+
+	public BaseListViewBuilder<T, C, L> setHideScrollBars(boolean hideScrollBars) {
+		node.setHideScrollBars(hideScrollBars);
+		return this;
+	}
+
+	public BaseListViewBuilder<T, C, L> setDepthLevel(DepthLevel depthLevel) {
+		node.setDepthLevel(depthLevel);
+		return this;
+	}
+}

+ 53 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/base/BaseProgressBuilder.java

@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.base;
+
+import javafx.scene.control.ProgressIndicator;
+
+public class BaseProgressBuilder<P extends ProgressIndicator> extends ControlBuilder<P> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	@SuppressWarnings("unchecked")
+	public BaseProgressBuilder() {
+		this((P) new ProgressIndicator());
+	}
+
+	public BaseProgressBuilder(P progressIndicator) {
+		super(progressIndicator);
+	}
+
+	public static BaseProgressBuilder<ProgressIndicator> progressIndicator() {
+		return new BaseProgressBuilder<>();
+	}
+
+	public static BaseProgressBuilder<ProgressIndicator> progressIndicator(ProgressIndicator progressIndicator) {
+		return new BaseProgressBuilder<>(progressIndicator);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public BaseProgressBuilder<P> setProgress(double value) {
+		node.setProgress(value);
+		return this;
+	}
+}

+ 61 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/base/BaseToggleNodeBuilder.java

@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.base;
+
+import io.github.palexdev.materialfx.controls.base.AbstractMFXToggleNode;
+import javafx.scene.Node;
+import javafx.scene.control.ToggleGroup;
+
+public class BaseToggleNodeBuilder<T extends AbstractMFXToggleNode> extends ButtonBaseBuilder<T> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public BaseToggleNodeBuilder(T toggleNode) {
+		super(toggleNode);
+	}
+
+	public static BaseToggleNodeBuilder<AbstractMFXToggleNode> toggleNode(AbstractMFXToggleNode toggleNode) {
+		return new BaseToggleNodeBuilder<>(toggleNode);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public BaseToggleNodeBuilder<T> setLabelLeadingIcon(Node labelLeadingIcon) {
+		node.setLabelLeadingIcon(labelLeadingIcon);
+		return this;
+	}
+
+	public BaseToggleNodeBuilder<T> setLabelTrailingIcon(Node labelTrailingIcon) {
+		node.setLabelTrailingIcon(labelTrailingIcon);
+		return this;
+	}
+
+	public BaseToggleNodeBuilder<T> setSelected(boolean value) {
+		node.setSelected(value);
+		return this;
+	}
+
+	public BaseToggleNodeBuilder<T> setToggleGroup(ToggleGroup value) {
+		node.setToggleGroup(value);
+		return this;
+	}
+}

+ 61 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/base/ButtonBaseBuilder.java

@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.base;
+
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.scene.control.ButtonBase;
+
+public class ButtonBaseBuilder<B extends ButtonBase> extends LabeledBuilder<B> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public ButtonBaseBuilder(B buttonBase) {
+		super(buttonBase);
+	}
+
+	public static ButtonBaseBuilder<ButtonBase> control(ButtonBase buttonBase) {
+		return new ButtonBaseBuilder<>(buttonBase);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public ButtonBaseBuilder<B> setOnAction(EventHandler<ActionEvent> handler) {
+		node.setOnAction(handler);
+		return this;
+	}
+
+	public ButtonBaseBuilder<B> arm() {
+		node.arm();
+		return this;
+	}
+
+	public ButtonBaseBuilder<B> disarm() {
+		node.disarm();
+		return this;
+	}
+
+	public ButtonBaseBuilder<B> fire() {
+		node.fire();
+		return this;
+	}
+}

+ 58 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/base/ControlBuilder.java

@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.base;
+
+import io.github.palexdev.materialfx.builders.layout.RegionBuilder;
+import javafx.scene.control.ContextMenu;
+import javafx.scene.control.Control;
+import javafx.scene.control.Skin;
+import javafx.scene.control.Tooltip;
+
+public class ControlBuilder<C extends Control> extends RegionBuilder<C> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public ControlBuilder(C control) {
+		super(control);
+	}
+
+	public static ControlBuilder<Control> control(Control control) {
+		return new ControlBuilder<>(control);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public ControlBuilder<C> setSkin(Skin<?> value) {
+		node.setSkin(value);
+		return this;
+	}
+
+	public ControlBuilder<C> setTooltip(Tooltip value) {
+		node.setTooltip(value);
+		return this;
+	}
+
+	public ControlBuilder<C> setContextMenu(ContextMenu value) {
+		node.setContextMenu(value);
+		return this;
+	}
+}

+ 25 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/base/INodeBuilder.java

@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.base;
+
+import javafx.scene.Node;
+
+public interface INodeBuilder<N extends Node> {
+	N getNode();
+}

+ 116 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/base/LabeledBuilder.java

@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.base;
+
+import javafx.geometry.Pos;
+import javafx.scene.Node;
+import javafx.scene.control.ContentDisplay;
+import javafx.scene.control.Labeled;
+import javafx.scene.control.OverrunStyle;
+import javafx.scene.paint.Paint;
+import javafx.scene.text.Font;
+import javafx.scene.text.TextAlignment;
+
+public class LabeledBuilder<L extends Labeled> extends ControlBuilder<L> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public LabeledBuilder(L labeled) {
+		super(labeled);
+	}
+
+	public static LabeledBuilder<Labeled> control(Labeled labeled) {
+		return new LabeledBuilder<>(labeled);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public LabeledBuilder<L> setText(String value) {
+		node.setText(value);
+		return this;
+	}
+
+	public LabeledBuilder<L> setAlignment(Pos value) {
+		node.setAlignment(value);
+		return this;
+	}
+
+	public LabeledBuilder<L> setTextAlignment(TextAlignment value) {
+		node.setTextAlignment(value);
+		return this;
+	}
+
+	public LabeledBuilder<L> setTextOverrun(OverrunStyle value) {
+		node.setTextOverrun(value);
+		return this;
+	}
+
+	public LabeledBuilder<L> setEllipsisString(String value) {
+		node.setEllipsisString(value);
+		return this;
+	}
+
+	public LabeledBuilder<L> setWrapText(boolean value) {
+		node.setWrapText(value);
+		return this;
+	}
+
+	public LabeledBuilder<L> setFont(Font value) {
+		node.setFont(value);
+		return this;
+	}
+
+	public LabeledBuilder<L> setGraphic(Node value) {
+		node.setGraphic(value);
+		return this;
+	}
+
+	public LabeledBuilder<L> setUnderline(boolean value) {
+		node.setUnderline(value);
+		return this;
+	}
+
+	public LabeledBuilder<L> setLineSpacing(double value) {
+		node.setLineSpacing(value);
+		return this;
+	}
+
+	public LabeledBuilder<L> setContentDisplay(ContentDisplay value) {
+		node.setContentDisplay(value);
+		return this;
+	}
+
+	public LabeledBuilder<L> setGraphicTextGap(double value) {
+		node.setGraphicTextGap(value);
+		return this;
+	}
+
+	public LabeledBuilder<L> setTextFill(Paint value) {
+		node.setTextFill(value);
+		return this;
+	}
+
+	public LabeledBuilder<L> setMnemonicParsing(boolean value) {
+		node.setMnemonicParsing(value);
+		return this;
+	}
+}

+ 101 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/ButtonBuilder.java

@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.builders.base.ButtonBaseBuilder;
+import io.github.palexdev.materialfx.controls.MFXButton;
+import io.github.palexdev.materialfx.effects.DepthLevel;
+import io.github.palexdev.materialfx.enums.ButtonType;
+import javafx.scene.paint.Paint;
+
+public class ButtonBuilder extends ButtonBaseBuilder<MFXButton> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public ButtonBuilder() {
+		this(new MFXButton());
+	}
+
+	public ButtonBuilder(MFXButton button) {
+		super(button);
+	}
+
+	public static ButtonBuilder button() {
+		return new ButtonBuilder();
+	}
+
+	public static ButtonBuilder button(MFXButton button) {
+		return new ButtonBuilder(button);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public ButtonBuilder setComputeRadiusMultiplier(boolean computeRadiusMultiplier) {
+		node.setComputeRadiusMultiplier(computeRadiusMultiplier);
+		return this;
+	}
+
+	public ButtonBuilder setRippleAnimateBackground(boolean rippleAnimateBackground) {
+		node.setRippleAnimateBackground(rippleAnimateBackground);
+		return this;
+	}
+
+	public ButtonBuilder setRippleAnimateShadow(boolean rippleAnimateShadow) {
+		node.setRippleAnimateShadow(rippleAnimateShadow);
+		return this;
+	}
+
+	public ButtonBuilder setRippleAnimationSpeed(double rippleAnimationSpeed) {
+		node.setRippleAnimationSpeed(rippleAnimationSpeed);
+		return this;
+	}
+
+	public ButtonBuilder setRippleBackgroundOpacity(double rippleBackgroundOpacity) {
+		node.setRippleBackgroundOpacity(rippleBackgroundOpacity);
+		return this;
+	}
+
+	public ButtonBuilder setRippleColor(Paint rippleColor) {
+		node.setRippleColor(rippleColor);
+		return this;
+	}
+
+	public ButtonBuilder setRippleRadius(double rippleRadius) {
+		node.setRippleRadius(rippleRadius);
+		return this;
+	}
+
+	public ButtonBuilder setRippleRadiusMultiplier(double rippleRadiusMultiplier) {
+		node.setRippleRadiusMultiplier(rippleRadiusMultiplier);
+		return this;
+	}
+
+	public ButtonBuilder setDepthLevel(DepthLevel depthLevel) {
+		node.setDepthLevel(depthLevel);
+		return this;
+	}
+
+	public ButtonBuilder setButtonType(ButtonType buttonType) {
+		node.setButtonType(buttonType);
+		return this;
+	}
+}

+ 79 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/CheckBoxBuilder.java

@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.builders.base.ButtonBaseBuilder;
+import io.github.palexdev.materialfx.controls.MFXCheckbox;
+import javafx.scene.control.ContentDisplay;
+
+public class CheckBoxBuilder extends ButtonBaseBuilder<MFXCheckbox> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public CheckBoxBuilder() {
+		this(new MFXCheckbox());
+	}
+
+	public CheckBoxBuilder(MFXCheckbox checkbox) {
+		super(checkbox);
+	}
+
+	public static CheckBoxBuilder checkbox() {
+		return new CheckBoxBuilder();
+	}
+
+	public static CheckBoxBuilder checkbox(MFXCheckbox checkbox) {
+		return new CheckBoxBuilder(checkbox);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public CheckBoxBuilder setContentDisposition(ContentDisplay contentDisposition) {
+		node.setContentDisposition(contentDisposition);
+		return this;
+	}
+
+	public CheckBoxBuilder setGap(double gap) {
+		node.setGap(gap);
+		return this;
+	}
+
+	public CheckBoxBuilder setTextExpand(boolean textExpand) {
+		node.setTextExpand(textExpand);
+		return this;
+	}
+
+	public CheckBoxBuilder setIndeterminate(boolean indeterminate) {
+		node.setIndeterminate(indeterminate);
+		return this;
+	}
+
+	public CheckBoxBuilder setSelected(boolean selected) {
+		node.setSelected(selected);
+		return this;
+	}
+
+	public CheckBoxBuilder setAllowIndeterminate(boolean allowIndeterminate) {
+		node.setAllowIndeterminate(allowIndeterminate);
+		return this;
+	}
+}

+ 116 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/CheckListBuilder.java

@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.builders.base.BaseListViewBuilder;
+import io.github.palexdev.materialfx.controls.MFXCheckListView;
+import io.github.palexdev.materialfx.controls.cell.MFXCheckListCell;
+
+import java.util.function.Function;
+
+public class CheckListBuilder<T> extends BaseListViewBuilder<T, MFXCheckListCell<T>, MFXCheckListView<T>> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public CheckListBuilder() {
+		this(new MFXCheckListView<>());
+	}
+
+	public CheckListBuilder(MFXCheckListView<T> listView) {
+		super(listView);
+	}
+
+	public static <T> CheckListBuilder<T> checkList() {
+		return new CheckListBuilder<>();
+	}
+
+	public static <T> CheckListBuilder<T> checkList(MFXCheckListView<T> checkListView) {
+		return new CheckListBuilder<>(checkListView);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public CheckListBuilder<T> scrollBy(double pixels) {
+		node.scrollBy(pixels);
+		return this;
+	}
+
+	public CheckListBuilder<T> scrollTo(int index) {
+		node.scrollTo(index);
+		return this;
+	}
+
+	public CheckListBuilder<T> scrollToFirst() {
+		node.scrollToFirst();
+		return this;
+	}
+
+	public CheckListBuilder<T> scrollToLast() {
+		node.scrollToLast();
+		return this;
+	}
+
+	public CheckListBuilder<T> scrollToPixel(double pixel) {
+		node.scrollToPixel(pixel);
+		return this;
+	}
+
+	public CheckListBuilder<T> setHSpeed(double unit, double block) {
+		node.setHSpeed(unit, block);
+		return this;
+	}
+
+	public CheckListBuilder<T> setVSpeed(double unit, double block) {
+		node.setVSpeed(unit, block);
+		return this;
+	}
+
+	public CheckListBuilder<T> setCellFactory(Function<T, MFXCheckListCell<T>> cellFactory) {
+		node.setCellFactory(cellFactory);
+		return this;
+	}
+
+	public CheckListBuilder<T> enableSmoothScrolling(double speed) {
+		node.features().enableSmoothScrolling(speed);
+		return this;
+	}
+
+	public CheckListBuilder<T> enableSmoothScrolling(double speed, double trackPadAdjustment) {
+		node.features().enableSmoothScrolling(speed, trackPadAdjustment);
+		return this;
+	}
+
+	public CheckListBuilder<T> enableSmoothScrolling(double speed, double trackPadAdjustment, double scrollThreshold) {
+		node.features().enableSmoothScrolling(speed, trackPadAdjustment, scrollThreshold);
+		return this;
+	}
+
+	public CheckListBuilder<T> enableBounceEffect() {
+		node.features().enableBounceEffect();
+		return this;
+	}
+
+	public CheckListBuilder<T> enableBounceEffect(double strength, double maxOverscroll) {
+		node.features().enableBounceEffect(strength, maxOverscroll);
+		return this;
+	}
+}

+ 64 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/CircleToggleNodeBuilder.java

@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.builders.base.BaseToggleNodeBuilder;
+import io.github.palexdev.materialfx.controls.MFXCircleToggleNode;
+import io.github.palexdev.materialfx.enums.TextPosition;
+
+public class CircleToggleNodeBuilder extends BaseToggleNodeBuilder<MFXCircleToggleNode> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public CircleToggleNodeBuilder() {
+		this(new MFXCircleToggleNode());
+	}
+
+	public CircleToggleNodeBuilder(MFXCircleToggleNode toggleNode) {
+		super(toggleNode);
+	}
+
+	public static CircleToggleNodeBuilder circleToggleNode() {
+		return new CircleToggleNodeBuilder();
+	}
+
+	public static CircleToggleNodeBuilder circleToggleNode(MFXCircleToggleNode circleToggleNode) {
+		return new CircleToggleNodeBuilder(circleToggleNode);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public CircleToggleNodeBuilder setGap(double gap) {
+		node.setGap(gap);
+		return this;
+	}
+
+	public CircleToggleNodeBuilder setSize(double size) {
+		node.setSize(size);
+		return this;
+	}
+
+	public CircleToggleNodeBuilder setTextPosition(TextPosition textPosition) {
+		node.setTextPosition(textPosition);
+		return this;
+	}
+}

+ 170 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/ComboBuilder.java

@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.beans.Alignment;
+import io.github.palexdev.materialfx.controls.MFXComboBox;
+import io.github.palexdev.virtualizedfx.cell.Cell;
+import javafx.animation.Animation;
+import javafx.collections.ObservableList;
+import javafx.event.Event;
+import javafx.event.EventHandler;
+import javafx.scene.Node;
+import javafx.util.StringConverter;
+
+import java.util.function.BiFunction;
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+public class ComboBuilder<T, C extends MFXComboBox<T>> extends TextFieldBuilder<C> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	@SuppressWarnings("unchecked")
+	public ComboBuilder() {
+		this((C) new MFXComboBox<T>());
+	}
+
+	public ComboBuilder(C comboBox) {
+		super(comboBox);
+	}
+
+	public static <T> ComboBuilder<T, MFXComboBox<T>> combo() {
+		return new ComboBuilder<>();
+	}
+
+	public static <T> ComboBuilder<T, MFXComboBox<T>> combo(MFXComboBox<T> comboBox) {
+		return new ComboBuilder<>(comboBox);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public ComboBuilder<T, C> selectFirst() {
+		node.selectFirst();
+		return this;
+	}
+
+	public ComboBuilder<T, C> selectNext() {
+		node.selectNext();
+		return this;
+	}
+
+	public ComboBuilder<T, C> selectPrevious() {
+		node.selectPrevious();
+		return this;
+	}
+
+	public ComboBuilder<T, C> selectLast() {
+		node.selectLast();
+		return this;
+	}
+
+	public ComboBuilder<T, C> clearSelection() {
+		node.clearSelection();
+		return this;
+	}
+
+	public ComboBuilder<T, C> selectIndex(int index) {
+		node.selectIndex(index);
+		return this;
+	}
+
+	public ComboBuilder<T, C> selectItem(T item) {
+		node.selectItem(item);
+		return this;
+	}
+
+	public ComboBuilder<T, C> setScrollOnOpen(boolean scrollOnOpen) {
+		node.setScrollOnOpen(scrollOnOpen);
+		return this;
+	}
+
+	public ComboBuilder<T, C> setPopupAlignment(Alignment popupAlignment) {
+		node.setPopupAlignment(popupAlignment);
+		return this;
+	}
+
+	public ComboBuilder<T, C> setPopupOffsetX(double popupOffsetX) {
+		node.setPopupOffsetX(popupOffsetX);
+		return this;
+	}
+
+	public ComboBuilder<T, C> setPopupOffsetY(double popupOffsetY) {
+		node.setPopupOffsetY(popupOffsetY);
+		return this;
+	}
+
+	public ComboBuilder<T, C> setAnimationProvider(BiFunction<Node, Boolean, Animation> animationProvider) {
+		node.setAnimationProvider(animationProvider);
+		return this;
+	}
+
+	public ComboBuilder<T, C> setValue(T value) {
+		node.setValue(value);
+		return this;
+	}
+
+	public ComboBuilder<T, C> setConverter(StringConverter<T> converter) {
+		node.setConverter(converter);
+		return this;
+	}
+
+	public ComboBuilder<T, C> setOnCommit(Consumer<String> onCommit) {
+		node.setOnCommit(onCommit);
+		return this;
+	}
+
+	public ComboBuilder<T, C> setOnCancel(Consumer<String> onCancel) {
+		node.setOnCancel(onCancel);
+		return this;
+	}
+
+	public ComboBuilder<T, C> setItems(ObservableList<T> items) {
+		node.setItems(items);
+		return this;
+	}
+
+	public ComboBuilder<T, C> setCellFactory(Function<T, Cell<T>> cellFactory) {
+		node.setCellFactory(cellFactory);
+		return this;
+	}
+
+	public ComboBuilder<T, C> setOnShowing(EventHandler<Event> onShowing) {
+		node.setOnShowing(onShowing);
+		return this;
+	}
+
+	public ComboBuilder<T, C> setOnShown(EventHandler<Event> onShown) {
+		node.setOnShown(onShown);
+		return this;
+	}
+
+	public ComboBuilder<T, C> setOnHiding(EventHandler<Event> onHiding) {
+		node.setOnHiding(onHiding);
+		return this;
+	}
+
+	public ComboBuilder<T, C> setOnHidden(EventHandler<Event> onHidden) {
+		node.setOnHidden(onHidden);
+		return this;
+	}
+}

+ 150 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/DatePickerBuilder.java

@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.beans.Alignment;
+import io.github.palexdev.materialfx.beans.NumberRange;
+import io.github.palexdev.materialfx.controls.MFXDatePicker;
+import io.github.palexdev.materialfx.controls.cell.MFXDateCell;
+import javafx.util.StringConverter;
+
+import java.time.DayOfWeek;
+import java.time.LocalDate;
+import java.time.Month;
+import java.time.YearMonth;
+import java.util.Locale;
+import java.util.function.BiFunction;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.Supplier;
+
+public class DatePickerBuilder extends TextFieldBuilder<MFXDatePicker> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public DatePickerBuilder() {
+	}
+
+	public DatePickerBuilder(MFXDatePicker datePicker) {
+		super(datePicker);
+	}
+
+	public static DatePickerBuilder datePicker() {
+		return new DatePickerBuilder();
+	}
+
+	public static DatePickerBuilder datePicker(MFXDatePicker datePicker) {
+		return new DatePickerBuilder(datePicker);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public DatePickerBuilder startCurrentDayUpdater() {
+		node.startCurrentDayUpdater();
+		return this;
+	}
+
+	public DatePickerBuilder stopCurrentDayUpdater() {
+		node.stopCurrentDayUpdater();
+		return this;
+	}
+
+	public DatePickerBuilder setPopupAlignment(Alignment popupAlignment) {
+		node.setPopupAlignment(popupAlignment);
+		return this;
+	}
+
+	public DatePickerBuilder setPopupOffsetX(double popupOffsetX) {
+		node.setPopupOffsetX(popupOffsetX);
+		return this;
+	}
+
+	public DatePickerBuilder setPopupOffsetY(double popupOffsetY) {
+		node.setPopupOffsetY(popupOffsetY);
+		return this;
+	}
+
+	public DatePickerBuilder setLocale(Locale locale) {
+		node.setLocale(locale);
+		return this;
+	}
+
+	public DatePickerBuilder setValue(LocalDate value) {
+		node.setValue(value);
+		return this;
+	}
+
+	public DatePickerBuilder setConverterSupplier(Supplier<StringConverter<LocalDate>> converterSupplier) {
+		node.setConverterSupplier(converterSupplier);
+		return this;
+	}
+
+	public DatePickerBuilder setMonthConverterSupplier(Supplier<StringConverter<Month>> monthConverterSupplier) {
+		node.setMonthConverterSupplier(monthConverterSupplier);
+		return this;
+	}
+
+	public DatePickerBuilder setDayOfWeekConverterSupplier(Supplier<StringConverter<DayOfWeek>> dayOfWeekConverterSupplier) {
+		node.setDayOfWeekConverterSupplier(dayOfWeekConverterSupplier);
+		return this;
+	}
+
+	public DatePickerBuilder setOnCommit(Consumer<String> onCommit) {
+		node.setOnCommit(onCommit);
+		return this;
+	}
+
+	public DatePickerBuilder setOnCancel(Consumer<String> onCancel) {
+		node.setOnCancel(onCancel);
+		return this;
+	}
+
+	public DatePickerBuilder setCellFactory(Function<LocalDate, MFXDateCell> cellFactory) {
+		node.setCellFactory(cellFactory);
+		return this;
+	}
+
+	public DatePickerBuilder updateCurrentDate() {
+		node.updateCurrentDate();
+		return this;
+	}
+
+	public DatePickerBuilder setYearsRange(NumberRange<Integer> yearsRange) {
+		node.setYearsRange(yearsRange);
+		return this;
+	}
+
+	public DatePickerBuilder setGridAlgorithm(BiFunction<Locale, YearMonth, Integer[][]> gridAlgorithm) {
+		node.setGridAlgorithm(gridAlgorithm);
+		return this;
+	}
+
+	public DatePickerBuilder setStartingYearMonth(YearMonth startingYearMonth) {
+		node.setStartingYearMonth(startingYearMonth);
+		return this;
+	}
+
+	public DatePickerBuilder setClosePopupOnChange(boolean closePopupOnChange) {
+		node.setClosePopupOnChange(closePopupOnChange);
+		return this;
+	}
+}

+ 81 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/FilterComboBuilder.java

@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.controls.MFXFilterComboBox;
+
+import java.util.Comparator;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+public class FilterComboBuilder<T> extends ComboBuilder<T, MFXFilterComboBox<T>> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public FilterComboBuilder() {
+		this(new MFXFilterComboBox<>());
+	}
+
+	public FilterComboBuilder(MFXFilterComboBox<T> comboBox) {
+		super(comboBox);
+	}
+
+	public static <T> FilterComboBuilder<T> filterCombo() {
+		return new FilterComboBuilder<>();
+	}
+
+	public static <T> FilterComboBuilder<T> filterCombo(MFXFilterComboBox<T> comboBox) {
+		return new FilterComboBuilder<>(comboBox);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public FilterComboBuilder<T> setSearchText(String searchText) {
+		node.setSearchText(searchText);
+		return this;
+	}
+
+	public FilterComboBuilder<T> setFilterFunction(Function<String, Predicate<T>> filterFunction) {
+		node.setFilterFunction(filterFunction);
+		return this;
+	}
+
+	public FilterComboBuilder<T> setResetOnPopupHidden(boolean resetOnPopupHidden) {
+		node.setResetOnPopupHidden(resetOnPopupHidden);
+		return this;
+	}
+	
+	public FilterComboBuilder<T> setFilter(Predicate<T> filter) {
+		node.getFilterList().setPredicate(filter);
+		return this;
+	}
+	
+	public FilterComboBuilder<T> setComparator(Comparator<T> comparator) {
+		node.getFilterList().setComparator(comparator);
+		return this;
+	}
+
+	public FilterComboBuilder<T> setComparator(Comparator<T> comparator, boolean isReverse) {
+		node.getFilterList().setComparator(comparator, isReverse);
+		return this;
+	}
+}

+ 91 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/FilterPaneBuilder.java

@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.beans.FilterBean;
+import io.github.palexdev.materialfx.builders.base.ControlBuilder;
+import io.github.palexdev.materialfx.controls.MFXFilterPane;
+import io.github.palexdev.materialfx.filter.base.AbstractFilter;
+import javafx.event.EventHandler;
+import javafx.scene.input.MouseEvent;
+
+public class FilterPaneBuilder<T> extends ControlBuilder<MFXFilterPane<T>> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public FilterPaneBuilder() {
+		this(new MFXFilterPane<>());
+	}
+
+	public FilterPaneBuilder(MFXFilterPane<T> filterPane) {
+		super(filterPane);
+	}
+
+	public static <T> FilterPaneBuilder<T> filterPane() {
+		return new FilterPaneBuilder<>();
+	}
+
+	public static <T> FilterPaneBuilder<T> filterPane(MFXFilterPane<T> filterPane) {
+		return new FilterPaneBuilder<>(filterPane);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public FilterPaneBuilder<T> setHeaderText(String headerText) {
+		node.setHeaderText(headerText);
+		return this;
+	}
+	
+	@SuppressWarnings("unchecked")
+	public FilterPaneBuilder<T> addFilters(AbstractFilter<T, ?>... filters) {
+		node.getFilters().addAll(filters);
+		return this;
+	}
+
+	@SuppressWarnings("unchecked")
+	public FilterPaneBuilder<T> setFilters(AbstractFilter<T, ?>... filters) {
+		node.getFilters().setAll(filters);
+		return this;
+	}
+
+	@SuppressWarnings("unchecked")
+	public FilterPaneBuilder<T> addActiveFilters(FilterBean<T, ?>... activeFilters) {
+		node.getActiveFilters().addAll(activeFilters);
+		return this;
+	}
+
+	@SuppressWarnings("unchecked")
+	public FilterPaneBuilder<T> setActiveFilters(FilterBean<T, ?>... activeFilters) {
+		node.getActiveFilters().setAll(activeFilters);
+		return this;
+	}
+
+	public FilterPaneBuilder<T> setOnFilter(EventHandler<MouseEvent> onFilter) {
+		node.setOnFilter(onFilter);
+		return this;
+	}
+
+	public FilterPaneBuilder<T> setOnReset(EventHandler<MouseEvent> onReset) {
+		node.setOnReset(onReset);
+		return this;
+	}
+}

+ 98 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/IconBuilder.java

@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.builders.base.INodeBuilder;
+import io.github.palexdev.materialfx.controls.MFXIconWrapper;
+import io.github.palexdev.materialfx.font.FontResources;
+import io.github.palexdev.materialfx.font.MFXFontIcon;
+import io.github.palexdev.materialfx.utils.NodeUtils;
+import javafx.scene.paint.Color;
+
+public class IconBuilder implements INodeBuilder<MFXFontIcon> {
+	//================================================================================
+	// Properties
+	//================================================================================
+	private final MFXFontIcon icon;
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public IconBuilder() {
+		icon = new MFXFontIcon();
+	}
+
+	public IconBuilder(MFXFontIcon icon) {
+		this.icon = icon;
+	}
+
+	public static IconBuilder icon() {
+		return new IconBuilder();
+	}
+
+	public static IconBuilder icon(MFXFontIcon icon) {
+		return new IconBuilder(icon);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public static MFXFontIcon getRandomIcon(double size, Color color) {
+		return MFXFontIcon.getRandomIcon(size, color);
+	}
+
+	public IconBuilder setColor(Color color) {
+		icon.setColor(color);
+		return this;
+	}
+
+	public IconBuilder setDescription(String code) {
+		icon.setDescription(code);
+		return this;
+	}
+
+	public IconBuilder setDescription(FontResources resource) {
+		icon.setDescription(resource.getDescription());
+		return this;
+	}
+
+	public IconBuilder setSize(double size) {
+		icon.setSize(size);
+		return this;
+	}
+
+	//================================================================================
+	// Methods
+	//================================================================================
+	public MFXIconWrapper wrapIcon(double size, boolean addRippleGenerator, boolean makeCircular) {
+		MFXIconWrapper wrapped = new MFXIconWrapper(icon, size);
+		if (addRippleGenerator) wrapped.defaultRippleGeneratorBehavior();
+		if (makeCircular) NodeUtils.makeRegionCircular(wrapped);
+		return wrapped;
+	}
+
+	//================================================================================
+	// Overridden Methods
+	//================================================================================
+	@Override
+	public MFXFontIcon getNode() {
+		return null;
+	}
+}

+ 116 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/ListBuilder.java

@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.builders.base.BaseListViewBuilder;
+import io.github.palexdev.materialfx.controls.MFXListView;
+import io.github.palexdev.materialfx.controls.cell.MFXListCell;
+
+import java.util.function.Function;
+
+public class ListBuilder<T> extends BaseListViewBuilder<T, MFXListCell<T>, MFXListView<T>> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public ListBuilder() {
+		this(new MFXListView<>());
+	}
+
+	public ListBuilder(MFXListView<T> listView) {
+		super(listView);
+	}
+
+	public static <T> ListBuilder<T> list() {
+		return new ListBuilder<>();
+	}
+
+	public static <T> ListBuilder<T> list(MFXListView<T> listView) {
+		return new ListBuilder<>(listView);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+	
+	public ListBuilder<T> scrollBy(double pixels) {
+		node.scrollBy(pixels);
+		return this;
+	}
+
+	public ListBuilder<T> scrollTo(int index) {
+		node.scrollTo(index);
+		return this;
+	}
+
+	public ListBuilder<T> scrollToFirst() {
+		node.scrollToFirst();
+		return this;
+	}
+
+	public ListBuilder<T> scrollToLast() {
+		node.scrollToLast();
+		return this;
+	}
+
+	public ListBuilder<T> scrollToPixel(double pixel) {
+		node.scrollToPixel(pixel);
+		return this;
+	}
+
+	public ListBuilder<T> setHSpeed(double unit, double block) {
+		node.setHSpeed(unit, block);
+		return this;
+	}
+
+	public ListBuilder<T> setVSpeed(double unit, double block) {
+		node.setVSpeed(unit, block);
+		return this;
+	}
+
+	public ListBuilder<T> setCellFactory(Function<T, MFXListCell<T>> cellFactory) {
+		node.setCellFactory(cellFactory);
+		return this;
+	}
+
+	public ListBuilder<T> enableSmoothScrolling(double speed) {
+		node.features().enableSmoothScrolling(speed);
+		return this;
+	}
+
+	public ListBuilder<T> enableSmoothScrolling(double speed, double trackPadAdjustment) {
+		node.features().enableSmoothScrolling(speed, trackPadAdjustment);
+		return this;
+	}
+
+	public ListBuilder<T> enableSmoothScrolling(double speed, double trackPadAdjustment, double scrollThreshold) {
+		node.features().enableSmoothScrolling(speed, trackPadAdjustment, scrollThreshold);
+		return this;
+	}
+
+	public ListBuilder<T> enableBounceEffect() {
+		node.features().enableBounceEffect();
+		return this;
+	}
+
+	public ListBuilder<T> enableBounceEffect(double strength, double maxOverscroll) {
+		node.features().enableBounceEffect(strength, maxOverscroll);
+		return this;
+	}
+}

+ 118 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/MagnifierBuilder.java

@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.beans.PositionBean;
+import io.github.palexdev.materialfx.builders.base.ControlBuilder;
+import io.github.palexdev.materialfx.controls.MFXMagnifierPane;
+import javafx.geometry.VPos;
+import javafx.scene.Node;
+import javafx.scene.paint.Color;
+import javafx.util.StringConverter;
+
+public class MagnifierBuilder extends ControlBuilder<MFXMagnifierPane> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public MagnifierBuilder() {
+		this(new MFXMagnifierPane(null));
+	}
+
+	public MagnifierBuilder(MFXMagnifierPane magnifier) {
+		super(magnifier);
+	}
+
+	public static MagnifierBuilder textField() {
+		return new MagnifierBuilder();
+	}
+
+	public static MagnifierBuilder textField(MFXMagnifierPane magnifier) {
+		return new MagnifierBuilder(magnifier);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public MagnifierBuilder setLensSize(double lensSize) {
+		node.setLensSize(lensSize);
+		return this;
+	}
+
+	public MagnifierBuilder setZoom(double zoom) {
+		node.setZoom(zoom);
+		return this;
+	}
+
+	public MagnifierBuilder setZoomIncrement(double zoomIncrement) {
+		node.setZoomIncrement(zoomIncrement);
+		return this;
+	}
+
+	public MagnifierBuilder setMinZoom(double minZoom) {
+		node.setMinZoom(minZoom);
+		return this;
+	}
+
+	public MagnifierBuilder setMaxZoom(double maxZoom) {
+		node.setMaxZoom(maxZoom);
+		return this;
+	}
+
+	public MagnifierBuilder setPickerPos(VPos pickerPos) {
+		node.setPickerPos(pickerPos);
+		return this;
+	}
+
+	public MagnifierBuilder setPickerSpacing(double pickerSpacing) {
+		node.setPickerSpacing(pickerSpacing);
+		return this;
+	}
+
+	public MagnifierBuilder setHideCursor(boolean hideCursor) {
+		node.setHideCursor(hideCursor);
+		return this;
+	}
+
+	public MagnifierBuilder setShowZoomLabel(boolean showZoomLabel) {
+		node.setShowZoomLabel(showZoomLabel);
+		return this;
+	}
+
+	public MagnifierBuilder setHideZoomLabelAfter(double hideZoomLabelAfter) {
+		node.setHideZoomLabelAfter(hideZoomLabelAfter);
+		return this;
+	}
+
+	public MagnifierBuilder setContent(Node content) {
+		node.setContent(content);
+		return this;
+	}
+
+	public MagnifierBuilder setPosition(PositionBean position) {
+		node.setPosition(position);
+		return this;
+	}
+
+	public MagnifierBuilder setColorConverter(StringConverter<Color> colorConverter) {
+		node.setColorConverter(colorConverter);
+		return this;
+	}
+}

+ 232 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/NotificationCenterBuilder.java

@@ -0,0 +1,232 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.builders.base.ControlBuilder;
+import io.github.palexdev.materialfx.controls.MFXNotificationCenter;
+import io.github.palexdev.materialfx.controls.cell.MFXNotificationCell;
+import io.github.palexdev.materialfx.enums.NotificationCounterStyle;
+import io.github.palexdev.materialfx.enums.NotificationState;
+import io.github.palexdev.materialfx.notifications.base.INotification;
+import javafx.event.EventHandler;
+import javafx.scene.input.MouseEvent;
+
+import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
+
+public class NotificationCenterBuilder extends ControlBuilder<MFXNotificationCenter> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public NotificationCenterBuilder() {
+		this(new MFXNotificationCenter());
+	}
+
+	public NotificationCenterBuilder(MFXNotificationCenter notificationCenter) {
+		super(notificationCenter);
+	}
+
+	public static NotificationCenterBuilder notificationCenter() {
+		return new NotificationCenterBuilder();
+	}
+
+	public static NotificationCenterBuilder notificationCenter(MFXNotificationCenter notificationCenter) {
+		return new NotificationCenterBuilder(notificationCenter);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public NotificationCenterBuilder addNotifications(INotification... notifications) {
+		node.getNotifications().addAll(notifications);
+		return this;
+	}
+
+	public NotificationCenterBuilder startNotificationsUpdater(long period, TimeUnit timeUnit) {
+		node.startNotificationsUpdater(period, timeUnit);
+		return this;
+	}
+
+	public NotificationCenterBuilder stopNotificationsUpdater() {
+		node.stopNotificationsUpdater();
+		return this;
+	}
+
+	public NotificationCenterBuilder markNotificationsAs(NotificationState state, INotification... notifications) {
+		node.markNotificationsAs(state, notifications);
+		return this;
+	}
+
+	public NotificationCenterBuilder markVisibleNotificationsAs(NotificationState state) {
+		node.markVisibleNotificationsAs(state);
+		return this;
+	}
+
+	public NotificationCenterBuilder markSelectedNotificationsAs(NotificationState state) {
+		node.markSelectedNotificationsAs(state);
+		return this;
+	}
+
+	public NotificationCenterBuilder markAllNotificationsAs(NotificationState state) {
+		node.markAllNotificationsAs(state);
+		return this;
+	}
+
+	public NotificationCenterBuilder dismiss(INotification... notifications) {
+		node.dismiss(notifications);
+		return this;
+	}
+
+	public NotificationCenterBuilder dismissVisible() {
+		node.dismissVisible();
+		return this;
+	}
+
+	public NotificationCenterBuilder dismissSelected() {
+		node.dismissSelected();
+		return this;
+	}
+
+	public NotificationCenterBuilder dismissAll() {
+		node.dismissAll();
+		return this;
+	}
+
+	public NotificationCenterBuilder setSelectionMode(boolean selectionMode) {
+		node.setSelectionMode(selectionMode);
+		return this;
+	}
+
+	public NotificationCenterBuilder setCounterStyle(NotificationCounterStyle counterStyle) {
+		node.setCounterStyle(counterStyle);
+		return this;
+	}
+
+	public NotificationCenterBuilder setHeaderTextProperty(String headerTextProperty) {
+		node.setHeaderTextProperty(headerTextProperty);
+		return this;
+	}
+
+	public NotificationCenterBuilder setDoNotDisturb(boolean doNotDisturb) {
+		node.setDoNotDisturb(doNotDisturb);
+		return this;
+	}
+
+	public NotificationCenterBuilder setPopupSpacing(double popupSpacing) {
+		node.setPopupSpacing(popupSpacing);
+		return this;
+	}
+
+	public NotificationCenterBuilder setPopupWidth(double popupWidth) {
+		node.setPopupWidth(popupWidth);
+		return this;
+	}
+
+	public NotificationCenterBuilder setPopupHeight(double popupHeight) {
+		node.setPopupHeight(popupHeight);
+		return this;
+	}
+
+	public NotificationCenterBuilder setAnimated(boolean animated) {
+		node.setAnimated(animated);
+		return this;
+	}
+
+	public NotificationCenterBuilder setMarkAsReadOnShow(boolean markAsReadOnShow) {
+		node.setMarkAsReadOnShow(markAsReadOnShow);
+		return this;
+	}
+
+	public NotificationCenterBuilder setMarkAsReadOnDismiss(boolean markAsReadOnDismiss) {
+		node.setMarkAsReadOnDismiss(markAsReadOnDismiss);
+		return this;
+	}
+
+	public NotificationCenterBuilder setOnIconClicked(EventHandler<MouseEvent> onIconClicked) {
+		node.setOnIconClicked(onIconClicked);
+		return this;
+	}
+
+	public NotificationCenterBuilder scrollBy(double pixels) {
+		node.scrollBy(pixels);
+		return this;
+	}
+
+	public NotificationCenterBuilder scrollTo(int index) {
+		node.scrollTo(index);
+		return this;
+	}
+
+	public NotificationCenterBuilder scrollToFirst() {
+		node.scrollToFirst();
+		return this;
+	}
+
+	public NotificationCenterBuilder scrollToLast() {
+		node.scrollToLast();
+		return this;
+	}
+
+	public NotificationCenterBuilder scrollToPixel(double pixel) {
+		node.scrollToPixel(pixel);
+		return this;
+	}
+
+	public NotificationCenterBuilder setHSpeed(double unit, double block) {
+		node.setHSpeed(unit, block);
+		return this;
+	}
+
+	public NotificationCenterBuilder setVSpeed(double unit, double block) {
+		node.setVSpeed(unit, block);
+		return this;
+	}
+
+	public NotificationCenterBuilder setCellFactory(Function<INotification, MFXNotificationCell> cellFactory) {
+		node.setCellFactory(cellFactory);
+		return this;
+	}
+
+	public NotificationCenterBuilder enableSmoothScrolling(double speed) {
+		node.features().enableSmoothScrolling(speed);
+		return this;
+	}
+
+	public NotificationCenterBuilder enableSmoothScrolling(double speed, double trackPadAdjustment) {
+		node.features().enableSmoothScrolling(speed, trackPadAdjustment);
+		return this;
+	}
+
+	public NotificationCenterBuilder enableSmoothScrolling(double speed, double trackPadAdjustment, double scrollThreshold) {
+		node.features().enableSmoothScrolling(speed, trackPadAdjustment, scrollThreshold);
+		return this;
+	}
+
+	public NotificationCenterBuilder enableBounceEffect() {
+		node.features().enableBounceEffect();
+		return this;
+	}
+
+	public NotificationCenterBuilder enableBounceEffect(double strength, double maxOverscroll) {
+		node.features().enableBounceEffect(strength, maxOverscroll);
+		return this;
+	}
+}

+ 67 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/PaginatedTableBuilder.java

@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.controls.MFXPaginatedTableView;
+
+public class PaginatedTableBuilder<T> extends TableBuilder<T, MFXPaginatedTableView<T>> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public PaginatedTableBuilder() {
+		this(new MFXPaginatedTableView<>());
+	}
+
+	public PaginatedTableBuilder(MFXPaginatedTableView<T> tableView) {
+		super(tableView);
+	}
+
+	public static <T> PaginatedTableBuilder<T> paginatedTable() {
+		return new PaginatedTableBuilder<>();
+	}
+
+	public static <T> PaginatedTableBuilder<T> paginatedTable(MFXPaginatedTableView<T> tableView) {
+		return new PaginatedTableBuilder<>(tableView);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public PaginatedTableBuilder<T> goToPage(int index) {
+		node.goToPage(index);
+		return this;
+	}
+
+	public PaginatedTableBuilder<T> setCurrentPage(int currentPage) {
+		node.setCurrentPage(currentPage);
+		return this;
+	}
+
+	public PaginatedTableBuilder<T> setPagesToShow(int pagesToShow) {
+		node.setPagesToShow(pagesToShow);
+		return this;
+	}
+
+	public PaginatedTableBuilder<T> setRowsPerPage(int rowsPerPage) {
+		node.setRowsPerPage(rowsPerPage);
+		return this;
+	}
+}

+ 94 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/PaginationBuilder.java

@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.builders.base.ControlBuilder;
+import io.github.palexdev.materialfx.controls.MFXPagination;
+import io.github.palexdev.materialfx.controls.cell.MFXPage;
+import javafx.geometry.Orientation;
+
+import java.util.List;
+import java.util.function.Function;
+import java.util.function.Supplier;
+
+public class PaginationBuilder extends ControlBuilder<MFXPagination> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public PaginationBuilder() {
+		this(new MFXPagination());
+	}
+
+	public PaginationBuilder(MFXPagination control) {
+		super(control);
+	}
+
+	public static PaginationBuilder pagination() {
+		return new PaginationBuilder();
+	}
+
+	public static PaginationBuilder pagination(MFXPagination pagination) {
+		return new PaginationBuilder(pagination);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public PaginationBuilder setCurrentPage(int currentPage) {
+		node.setCurrentPage(currentPage);
+		return this;
+	}
+
+	public PaginationBuilder setMaxPage(int maxPage) {
+		node.setMaxPage(maxPage);
+		return this;
+	}
+
+	public PaginationBuilder setPagesToShow(int pagesToShow) {
+		node.setPagesToShow(pagesToShow);
+		return this;
+	}
+
+	public PaginationBuilder setIndexesSupplier(Supplier<List<Integer>> indexesSupplier) {
+		node.setIndexesSupplier(indexesSupplier);
+		return this;
+	}
+
+	public PaginationBuilder setPageCellFactory(Function<Integer, MFXPage> pageCellFactory) {
+		node.setPageCellFactory(pageCellFactory);
+		return this;
+	}
+
+	public PaginationBuilder setEllipseString(String ellipseString) {
+		node.setEllipseString(ellipseString);
+		return this;
+	}
+
+	public PaginationBuilder setOrientation(Orientation orientation) {
+		node.setOrientation(orientation);
+		return this;
+	}
+
+	public PaginationBuilder setShowPopupForTruncatedPages(boolean showPopupForTruncatedPages) {
+		node.setShowPopupForTruncatedPages(showPopupForTruncatedPages);
+		return this;
+	}
+}

+ 71 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/PasswordFieldBuilder.java

@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.controls.MFXPasswordField;
+
+public class PasswordFieldBuilder extends TextFieldBuilder<MFXPasswordField> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public PasswordFieldBuilder() {
+		this(new MFXPasswordField());
+	}
+
+	public PasswordFieldBuilder(MFXPasswordField passwordField) {
+		super(passwordField);
+	}
+	public static PasswordFieldBuilder passwordField() {
+		return new PasswordFieldBuilder();
+	}
+
+	public static PasswordFieldBuilder passwordField(MFXPasswordField passwordField) {
+		return new PasswordFieldBuilder(passwordField);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public PasswordFieldBuilder setAllowCopy(boolean allowCopy) {
+		node.setAllowCopy(allowCopy);
+		return this;
+	}
+
+	public PasswordFieldBuilder setAllowCut(boolean allowCut) {
+		node.setAllowCut(allowCut);
+		return this;
+	}
+
+	public PasswordFieldBuilder setAllowPaste(boolean allowPaste) {
+		node.setAllowPaste(allowPaste);
+		return this;
+	}
+
+	public PasswordFieldBuilder setShowPassword(boolean showPassword) {
+		node.setShowPassword(showPassword);
+		return this;
+	}
+
+	public PasswordFieldBuilder setHideCharacter(String hideCharacter) {
+		node.setHideCharacter(hideCharacter);
+		return this;
+	}
+}

+ 108 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/PopupBuilder.java

@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.beans.Alignment;
+import io.github.palexdev.materialfx.controls.MFXPopup;
+import javafx.animation.Animation;
+import javafx.scene.Node;
+import javafx.scene.Parent;
+import javafx.scene.transform.Scale;
+
+import java.util.function.BiFunction;
+
+public class PopupBuilder {
+	//================================================================================
+	// Properties
+	//================================================================================
+	private final MFXPopup popup;
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public PopupBuilder() {
+		this(new MFXPopup());
+	}
+
+	public PopupBuilder(MFXPopup popup) {
+		this.popup = popup;
+	}
+
+	public static PopupBuilder popup() {
+		return new PopupBuilder();
+	}
+
+	public static PopupBuilder popup(MFXPopup popup) {
+		return new PopupBuilder(popup);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public PopupBuilder show(Node ownerNode, double anchorX, double anchorY) {
+		popup.show(ownerNode, anchorX, anchorY);
+		return this;
+	}
+
+	public PopupBuilder show(Node node) {
+		popup.show(node);
+		return this;
+	}
+
+	public PopupBuilder show(Node node, Alignment alignment) {
+		popup.show(node, alignment);
+		return this;
+	}
+
+	public PopupBuilder show(Node node, Alignment alignment, double xOffset, double yOffset) {
+		popup.show(node, alignment, xOffset, yOffset);
+		return this;
+	}
+
+	public PopupBuilder setPopupStyleableParent(Parent parent) {
+		popup.setPopupStyleableParent(parent);
+		return this;
+	}
+
+	public PopupBuilder addStylesheet(String... stylesheets) {
+		popup.getStyleSheets().addAll(stylesheets);
+		return this;
+	}
+
+	public PopupBuilder setStylesheet(String... stylesheets) {
+		popup.getStyleSheets().setAll(stylesheets);
+		return this;
+	}
+
+	public PopupBuilder setContent(Node content) {
+		popup.setContent(content);
+		return this;
+	}
+
+	public PopupBuilder setAnimationProvider(BiFunction<Node, Scale, Animation> animationProvider) {
+		popup.setAnimationProvider(animationProvider);
+		return this;
+	}
+
+	public PopupBuilder setAnimated(boolean animated) {
+		popup.setAnimated(animated);
+		return this;
+	}
+}

+ 72 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/ProgressBarBuilder.java

@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.beans.NumberRange;
+import io.github.palexdev.materialfx.builders.base.BaseProgressBuilder;
+import io.github.palexdev.materialfx.controls.MFXProgressBar;
+
+public class ProgressBarBuilder extends BaseProgressBuilder<MFXProgressBar> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public ProgressBarBuilder() {
+		this(new MFXProgressBar());
+	}
+
+	public ProgressBarBuilder(MFXProgressBar progressBar) {
+		super(progressBar);
+	}
+
+	public static ProgressBarBuilder progressBar() {
+		return new ProgressBarBuilder();
+	}
+
+	public static ProgressBarBuilder progressBar(MFXProgressBar progressIndicator) {
+		return new ProgressBarBuilder(progressIndicator);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	@SuppressWarnings("unchecked")
+	public ProgressBarBuilder setRanges1(NumberRange<Double>... ranges) {
+		node.getRanges1().setAll(ranges);
+		return this;
+	}
+
+	@SuppressWarnings("unchecked")
+	public ProgressBarBuilder setRanges2(NumberRange<Double>... ranges) {
+		node.getRanges2().setAll(ranges);
+		return this;
+	}
+
+	@SuppressWarnings("unchecked")
+	public ProgressBarBuilder setRanges3(NumberRange<Double>... ranges) {
+		node.getRanges3().setAll(ranges);
+		return this;
+	}
+
+	public ProgressBarBuilder setAnimationSpeed(double animationSpeed) {
+		node.setAnimationSpeed(animationSpeed);
+		return this;
+	}
+}

+ 98 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/ProgressSpinnerBuilder.java

@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.beans.NumberRange;
+import io.github.palexdev.materialfx.builders.base.BaseProgressBuilder;
+import io.github.palexdev.materialfx.controls.MFXProgressSpinner;
+import javafx.scene.paint.Color;
+
+public class ProgressSpinnerBuilder extends BaseProgressBuilder<MFXProgressSpinner> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public ProgressSpinnerBuilder() {
+		this(new MFXProgressSpinner());
+	}
+
+	public ProgressSpinnerBuilder(MFXProgressSpinner progressSpinner) {
+		super(progressSpinner);
+	}
+
+	public static ProgressSpinnerBuilder progressSpinner() {
+		return new ProgressSpinnerBuilder();
+	}
+
+	public static ProgressSpinnerBuilder progressSpinner(MFXProgressSpinner progressSpinner) {
+		return new ProgressSpinnerBuilder(progressSpinner);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public ProgressSpinnerBuilder setColor1(Color color1) {
+		node.setColor1(color1);
+		return this;
+	}
+
+	public ProgressSpinnerBuilder setColor2(Color color2) {
+		node.setColor2(color2);
+		return this;
+	}
+
+	public ProgressSpinnerBuilder setColor3(Color color3) {
+		node.setColor3(color3);
+		return this;
+	}
+
+	public ProgressSpinnerBuilder setColor4(Color color4) {
+		node.setColor4(color4);
+		return this;
+	}
+
+	public ProgressSpinnerBuilder setRadius(double radius) {
+		node.setRadius(radius);
+		return this;
+	}
+
+	public ProgressSpinnerBuilder setStartingAngle(double startingAngle) {
+		node.setStartingAngle(startingAngle);
+		return this;
+	}
+
+	@SuppressWarnings("unchecked")
+	public ProgressSpinnerBuilder setRanges1(NumberRange<Double>... ranges) {
+		node.getRanges1().setAll(ranges);
+		return this;
+	}
+
+	@SuppressWarnings("unchecked")
+	public ProgressSpinnerBuilder setRanges2(NumberRange<Double>... ranges) {
+		node.getRanges2().setAll(ranges);
+		return this;
+	}
+
+	@SuppressWarnings("unchecked")
+	public ProgressSpinnerBuilder setRanges3(NumberRange<Double>... ranges) {
+		node.getRanges3().setAll(ranges);
+		return this;
+	}
+}

+ 85 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/RadioBuilder.java

@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.builders.base.ButtonBaseBuilder;
+import io.github.palexdev.materialfx.controls.MFXRadioButton;
+import javafx.scene.control.ContentDisplay;
+import javafx.scene.control.ToggleGroup;
+
+public class RadioBuilder extends ButtonBaseBuilder<MFXRadioButton> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public RadioBuilder() {
+		this(new MFXRadioButton());
+	}
+
+	public RadioBuilder(MFXRadioButton radioButton) {
+		super(radioButton);
+	}
+
+	public static RadioBuilder radio() {
+		return new RadioBuilder();
+	}
+
+	public static RadioBuilder radio(MFXRadioButton radioButton) {
+		return new RadioBuilder(radioButton);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public RadioBuilder setContentDisposition(ContentDisplay contentDisposition) {
+		node.setContentDisposition(contentDisposition);
+		return this;
+	}
+
+	public RadioBuilder setGap(double gap) {
+		node.setGap(gap);
+		return this;
+	}
+
+	public RadioBuilder setRadioGap(double radioGap) {
+		node.setRadioGap(radioGap);
+		return this;
+	}
+
+	public RadioBuilder setRadius(double radius) {
+		node.setRadius(radius);
+		return this;
+	}
+
+	public RadioBuilder setTextExpand(boolean textExpand) {
+		node.setTextExpand(textExpand);
+		return this;
+	}
+
+	public RadioBuilder setSelected(boolean value) {
+		node.setSelected(value);
+		return this;
+	}
+
+	public RadioBuilder setToggleGroup(ToggleGroup value) {
+		node.setToggleGroup(value);
+		return this;
+	}
+}

+ 54 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/RectangleToggleNodeBuilder.java

@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.builders.base.BaseToggleNodeBuilder;
+import io.github.palexdev.materialfx.controls.MFXRectangleToggleNode;
+import io.github.palexdev.materialfx.factories.RippleClipTypeFactory;
+
+public class RectangleToggleNodeBuilder extends BaseToggleNodeBuilder<MFXRectangleToggleNode> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public RectangleToggleNodeBuilder() {
+		this(new MFXRectangleToggleNode());
+	}
+
+	public RectangleToggleNodeBuilder(MFXRectangleToggleNode toggleNode) {
+		super(toggleNode);
+	}
+
+	public static RectangleToggleNodeBuilder rectangleToggleNode() {
+		return new RectangleToggleNodeBuilder();
+	}
+
+	public static RectangleToggleNodeBuilder rectangleToggleNode(MFXRectangleToggleNode rectangleToggleNode) {
+		return new RectangleToggleNodeBuilder(rectangleToggleNode);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public RectangleToggleNodeBuilder setRippleClipTypeFactory(RippleClipTypeFactory rippleClipTypeFactory) {
+		node.setRippleClipTypeFactory(rippleClipTypeFactory);
+		return this;
+	}
+}

+ 152 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/ScrollPaneBuilder.java

@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.builders.base.ControlBuilder;
+import io.github.palexdev.materialfx.controls.MFXScrollPane;
+import javafx.geometry.Bounds;
+import javafx.scene.Node;
+import javafx.scene.control.ScrollPane;
+import javafx.scene.paint.Paint;
+
+public class ScrollPaneBuilder extends ControlBuilder<MFXScrollPane> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public ScrollPaneBuilder() {
+		this(new MFXScrollPane());
+	}
+
+	public ScrollPaneBuilder(MFXScrollPane scrollPane) {
+		super(scrollPane);
+	}
+
+	public static ScrollPaneBuilder scrollPane() {
+		return new ScrollPaneBuilder();
+	}
+
+	public static ScrollPaneBuilder scrollPane(MFXScrollPane scrollPane) {
+		return new ScrollPaneBuilder(scrollPane);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public ScrollPaneBuilder setTrackColor(Paint trackColor) {
+		node.setTrackColor(trackColor);
+		return this;
+	}
+
+	public ScrollPaneBuilder setThumbColor(Paint thumbColor) {
+		node.setThumbColor(thumbColor);
+		return this;
+	}
+
+	public ScrollPaneBuilder setThumbHoverColor(Paint thumbHoverColor) {
+		node.setThumbHoverColor(thumbHoverColor);
+		return this;
+	}
+
+	public ScrollPaneBuilder setHBarPolicy(ScrollPane.ScrollBarPolicy hBarPolicy) {
+		node.setHbarPolicy(hBarPolicy);
+		return this;
+	}
+
+	public ScrollPaneBuilder setVBarPolicy(ScrollPane.ScrollBarPolicy vBarPolicy) {
+		node.setVbarPolicy(vBarPolicy);
+		return this;
+	}
+
+	public ScrollPaneBuilder setContent(Node content) {
+		node.setContent(content);
+		return this;
+	}
+
+	public ScrollPaneBuilder setHValue(double hValue) {
+		node.setHvalue(hValue);
+		return this;
+	}
+
+	public ScrollPaneBuilder setVValue(double vValue) {
+		node.setVvalue(vValue);
+		return this;
+	}
+
+	public ScrollPaneBuilder setHMin(double hMin) {
+		node.setHmin(hMin);
+		return this;
+	}
+
+	public ScrollPaneBuilder setVMin(double vMin) {
+		node.setVmin(vMin);
+		return this;
+	}
+
+	public ScrollPaneBuilder setHMax(double hMax) {
+		node.setHmax(hMax);
+		return this;
+	}
+
+	public ScrollPaneBuilder setVMax(double vMax) {
+		node.setVmax(vMax);
+		return this;
+	}
+
+	public ScrollPaneBuilder setFitToWidth(boolean fitToWidth) {
+		node.setFitToWidth(fitToWidth);
+		return this;
+	}
+
+	public ScrollPaneBuilder setFitToHeight(boolean fitToHeight) {
+		node.setFitToHeight(fitToHeight);
+		return this;
+	}
+
+	public ScrollPaneBuilder setPannable(boolean pannable) {
+		node.setPannable(pannable);
+		return this;
+	}
+
+	public ScrollPaneBuilder setPrefViewportWidth(double prefViewportWidth) {
+		node.setPrefViewportWidth(prefViewportWidth);
+		return this;
+	}
+
+	public ScrollPaneBuilder setPrefViewportHeight(double prefViewportHeight) {
+		node.setPrefViewportHeight(prefViewportHeight);
+		return this;
+	}
+
+	public ScrollPaneBuilder setMinViewportWidth(double minViewportWidth) {
+		node.setMinViewportWidth(minViewportWidth);
+		return this;
+	}
+
+	public ScrollPaneBuilder setMinViewportHeight(double minViewportHeight) {
+		node.setMinViewportHeight(minViewportHeight);
+		return this;
+	}
+
+	public ScrollPaneBuilder setViewportBounds(Bounds viewportBounds) {
+		node.setViewportBounds(viewportBounds);
+		return this;
+	}
+}

+ 173 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/SliderBuilder.java

@@ -0,0 +1,173 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.beans.NumberRange;
+import io.github.palexdev.materialfx.builders.base.ControlBuilder;
+import io.github.palexdev.materialfx.controls.MFXSlider;
+import io.github.palexdev.materialfx.enums.SliderEnums;
+import javafx.geometry.Orientation;
+import javafx.scene.Node;
+import javafx.scene.layout.Region;
+
+import java.util.function.Supplier;
+
+public class SliderBuilder extends ControlBuilder<MFXSlider> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public SliderBuilder() {
+		this(new MFXSlider());
+	}
+
+	public SliderBuilder(MFXSlider control) {
+		super(control);
+	}
+
+	public static SliderBuilder slider() {
+		return new SliderBuilder();
+	}
+
+	public static SliderBuilder slider(MFXSlider slider) {
+		return new SliderBuilder(slider);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public SliderBuilder setMin(double min) {
+		node.setMin(min);
+		return this;
+	}
+
+	public SliderBuilder setMax(double max) {
+		node.setMax(max);
+		return this;
+	}
+
+	public SliderBuilder setValue(double value) {
+		node.setValue(value);
+		return this;
+	}
+
+	public SliderBuilder setThumbSupplier(Supplier<Node> thumbSupplier) {
+		node.setThumbSupplier(thumbSupplier);
+		return this;
+	}
+
+	public SliderBuilder setPopupSupplier(Supplier<Region> popupSupplier) {
+		node.setPopupSupplier(popupSupplier);
+		return this;
+	}
+
+	public SliderBuilder setPopupPadding(double popupPadding) {
+		node.setPopupPadding(popupPadding);
+		return this;
+	}
+
+	public SliderBuilder setDecimalPrecision(int decimalPrecision) {
+		node.setDecimalPrecision(decimalPrecision);
+		return this;
+	}
+
+	public SliderBuilder setEnableKeyboard(boolean enableKeyboard) {
+		node.setEnableKeyboard(enableKeyboard);
+		return this;
+	}
+
+	@SuppressWarnings("unchecked")
+	public SliderBuilder setRanges1(NumberRange<Double>... ranges) {
+		node.getRanges1().setAll(ranges);
+		return this;
+	}
+
+	@SuppressWarnings("unchecked")
+	public SliderBuilder setRanges2(NumberRange<Double>... ranges) {
+		node.getRanges2().setAll(ranges);
+		return this;
+	}
+
+	@SuppressWarnings("unchecked")
+	public SliderBuilder setRanges3(NumberRange<Double>... ranges) {
+		node.getRanges3().setAll(ranges);
+		return this;
+	}
+
+	public SliderBuilder setSliderMode(SliderEnums.SliderMode sliderMode) {
+		node.setSliderMode(sliderMode);
+		return this;
+	}
+
+	public SliderBuilder setUnitIncrement(double unitIncrement) {
+		node.setUnitIncrement(unitIncrement);
+		return this;
+	}
+
+	public SliderBuilder setAlternativeUnitIncrement(double alternativeUnitIncrement) {
+		node.setAlternativeUnitIncrement(alternativeUnitIncrement);
+		return this;
+	}
+
+	public SliderBuilder setTickUnit(double tickUnit) {
+		node.setTickUnit(tickUnit);
+		return this;
+	}
+
+	public SliderBuilder setShowMajorTicks(boolean showMajorTicks) {
+		node.setShowMajorTicks(showMajorTicks);
+		return this;
+	}
+
+	public SliderBuilder setShowMinorTicks(boolean showMinorTicks) {
+		node.setShowMinorTicks(showMinorTicks);
+		return this;
+	}
+
+	public SliderBuilder setShowTicksAtEdges(boolean showTicksAtEdges) {
+		node.setShowTicksAtEdges(showTicksAtEdges);
+		return this;
+	}
+
+	public SliderBuilder setMinorTicksCount(int minorTicksCount) {
+		node.setMinorTicksCount(minorTicksCount);
+		return this;
+	}
+
+	public SliderBuilder setAnimateOnPress(boolean animateOnPress) {
+		node.setAnimateOnPress(animateOnPress);
+		return this;
+	}
+
+	public SliderBuilder setBidirectional(boolean bidirectional) {
+		node.setBidirectional(bidirectional);
+		return this;
+	}
+
+	public SliderBuilder setOrientation(Orientation orientation) {
+		node.setOrientation(orientation);
+		return this;
+	}
+
+	public SliderBuilder setPopupSide(SliderEnums.SliderPopupSide popupSide) {
+		node.setPopupSide(popupSide);
+		return this;
+	}
+}

+ 144 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/StepperBuilder.java

@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.builders.base.ControlBuilder;
+import io.github.palexdev.materialfx.controls.MFXStepper;
+import io.github.palexdev.materialfx.controls.MFXStepperToggle;
+import javafx.event.EventHandler;
+import javafx.geometry.Pos;
+import javafx.scene.paint.Paint;
+
+import java.util.List;
+
+public class StepperBuilder extends ControlBuilder<MFXStepper> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public StepperBuilder() {
+		this(new MFXStepper());
+	}
+
+	public StepperBuilder(MFXStepper stepper) {
+		super(stepper);
+	}
+
+	public static StepperBuilder stepper() {
+		return new StepperBuilder();
+	}
+
+	public static StepperBuilder stepper(MFXStepper stepper) {
+		return new StepperBuilder(stepper);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public StepperBuilder setStepperToggles(List<MFXStepperToggle> stepperToggles) {
+		node.setStepperToggles(stepperToggles);
+		return this;
+	}
+
+	public StepperBuilder setAnimationDuration(double animationDuration) {
+		node.setAnimationDuration(animationDuration);
+		return this;
+	}
+
+	public StepperBuilder setEnableContentValidationOnError(boolean enableContentValidationOnError) {
+		node.setEnableContentValidationOnError(enableContentValidationOnError);
+		return this;
+	}
+
+	public StepperBuilder setSpacing(double spacing) {
+		node.setSpacing(spacing);
+		return this;
+	}
+
+	public StepperBuilder setExtraSpacing(double extraSpacing) {
+		node.setExtraSpacing(extraSpacing);
+		return this;
+	}
+
+	public StepperBuilder setAlignment(Pos alignment) {
+		node.setAlignment(alignment);
+		return this;
+	}
+
+	public StepperBuilder setBaseColor(Paint baseColor) {
+		node.setBaseColor(baseColor);
+		return this;
+	}
+
+	public StepperBuilder setAltColor(Paint altColor) {
+		node.setAltColor(altColor);
+		return this;
+	}
+
+	public StepperBuilder setProgressBarBorderRadius(double progressBarBorderRadius) {
+		node.setProgressBarBorderRadius(progressBarBorderRadius);
+		return this;
+	}
+
+	public StepperBuilder setProgressBarBackground(Paint progressBarBackground) {
+		node.setProgressBarBackground(progressBarBackground);
+		return this;
+	}
+
+	public StepperBuilder setProgressColor(Paint progressColor) {
+		node.setProgressColor(progressColor);
+		return this;
+	}
+
+	public StepperBuilder setAnimated(boolean animated) {
+		node.setAnimated(animated);
+		return this;
+	}
+
+	public StepperBuilder setOnBeforeNext(EventHandler<MFXStepper.MFXStepperEvent> onBeforeNext) {
+		node.setOnBeforeNext(onBeforeNext);
+		return this;
+	}
+
+	public StepperBuilder setOnNext(EventHandler<MFXStepper.MFXStepperEvent> onNext) {
+		node.setOnNext(onNext);
+		return this;
+	}
+
+	public StepperBuilder setOnBeforePrevious(EventHandler<MFXStepper.MFXStepperEvent> onBeforePrevious) {
+		node.setOnBeforePrevious(onBeforePrevious);
+		return this;
+	}
+
+	public StepperBuilder setOnPrevious(EventHandler<MFXStepper.MFXStepperEvent> onPrevious) {
+		node.setOnPrevious(onPrevious);
+		return this;
+	}
+
+	public StepperBuilder setOnLastNext(EventHandler<MFXStepper.MFXStepperEvent> onLastNext) {
+		node.setOnLastNext(onLastNext);
+		return this;
+	}
+
+	public StepperBuilder setOnValidationFailed(EventHandler<MFXStepper.MFXStepperEvent> onValidationFailed) {
+		node.setOnValidationFailed(onValidationFailed);
+		return this;
+	}
+}

+ 96 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/StepperToggleBuilder.java

@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.builders.base.ControlBuilder;
+import io.github.palexdev.materialfx.controls.MFXStepperToggle;
+import io.github.palexdev.materialfx.enums.StepperToggleState;
+import io.github.palexdev.materialfx.enums.TextPosition;
+import javafx.scene.Node;
+
+public class StepperToggleBuilder extends ControlBuilder<MFXStepperToggle> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public StepperToggleBuilder() {
+		this(new MFXStepperToggle());
+	}
+
+	public StepperToggleBuilder(MFXStepperToggle stepperToggle) {
+		super(stepperToggle);
+	}
+
+	public static StepperToggleBuilder stepperToggle() {
+		return new StepperToggleBuilder();
+	}
+
+	public static StepperToggleBuilder stepperToggle(MFXStepperToggle stepperToggle) {
+		return new StepperToggleBuilder(stepperToggle);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public StepperToggleBuilder setContent(Node content) {
+		node.setContent(content);
+		return this;
+	}
+
+	public StepperToggleBuilder setText(String text) {
+		node.setText(text);
+		return this;
+	}
+
+	public StepperToggleBuilder setIcon(Node icon) {
+		node.setIcon(icon);
+		return this;
+	}
+
+	public StepperToggleBuilder setState(StepperToggleState state) {
+		node.setState(state);
+		return this;
+	}
+
+	public StepperToggleBuilder setShowErrorIcon(boolean showErrorIcon) {
+		node.setShowErrorIcon(showErrorIcon);
+		return this;
+	}
+
+	public StepperToggleBuilder setLabelTextGap(double labelTextGap) {
+		node.setLabelTextGap(labelTextGap);
+		return this;
+	}
+
+	public StepperToggleBuilder setTextPosition(TextPosition textPosition) {
+		node.setTextPosition(textPosition);
+		return this;
+	}
+
+	public StepperToggleBuilder setSize(double size) {
+		node.setSize(size);
+		return this;
+	}
+
+	public StepperToggleBuilder setStrokeWidth(double strokeWidth) {
+		node.setStrokeWidth(strokeWidth);
+		return this;
+	}
+}

+ 176 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/TableBuilder.java

@@ -0,0 +1,176 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.builders.base.ControlBuilder;
+import io.github.palexdev.materialfx.controls.MFXTableColumn;
+import io.github.palexdev.materialfx.controls.MFXTableRow;
+import io.github.palexdev.materialfx.controls.MFXTableView;
+import io.github.palexdev.materialfx.filter.base.AbstractFilter;
+import javafx.collections.ObservableList;
+
+import java.util.Comparator;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+public class TableBuilder<T, V extends MFXTableView<T>> extends ControlBuilder<V> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	@SuppressWarnings("unchecked")
+	public TableBuilder() {
+		this((V) new MFXTableView<T>());
+	}
+
+	public TableBuilder(V tableView) {
+		super(tableView);
+	}
+
+	public static <T> TableBuilder<T, MFXTableView<T>> table() {
+		return new TableBuilder<>();
+	}
+
+	public static <T> TableBuilder<T, MFXTableView<T>> table(MFXTableView<T> tableView) {
+		return new TableBuilder<>(tableView);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public TableBuilder<T, V> autosizeColumnsOnInitialization() {
+		node.autosizeColumnsOnInitialization();
+		return this;
+	}
+
+	public TableBuilder<T, V> scrollBy(double pixels) {
+		node.scrollBy(pixels);
+		return this;
+	}
+
+	public TableBuilder<T, V> scrollTo(int index) {
+		node.scrollTo(index);
+		return this;
+	}
+
+	public TableBuilder<T, V> scrollToFirst() {
+		node.scrollToFirst();
+		return this;
+	}
+
+	public TableBuilder<T, V> scrollToLast() {
+		node.scrollToLast();
+		return this;
+	}
+
+	public TableBuilder<T, V> scrollToPixel(double pixel) {
+		node.scrollToPixel(pixel);
+		return this;
+	}
+
+	public TableBuilder<T, V> setHSpeed(double unit, double block) {
+		node.setHSpeed(unit, block);
+		return this;
+	}
+
+	public TableBuilder<T, V> setVSpeed(double unit, double block) {
+		node.setVSpeed(unit, block);
+		return this;
+	}
+
+	public TableBuilder<T, V> enableSmoothScrolling(double speed) {
+		node.features().enableSmoothScrolling(speed);
+		return this;
+	}
+
+	public TableBuilder<T, V> enableSmoothScrolling(double speed, double trackPadAdjustment) {
+		node.features().enableSmoothScrolling(speed, trackPadAdjustment);
+		return this;
+	}
+
+	public TableBuilder<T, V> enableSmoothScrolling(double speed, double trackPadAdjustment, double scrollThreshold) {
+		node.features().enableSmoothScrolling(speed, trackPadAdjustment, scrollThreshold);
+		return this;
+	}
+
+	public TableBuilder<T, V> enableBounceEffect() {
+		node.features().enableBounceEffect();
+		return this;
+	}
+
+	public TableBuilder<T, V> enableBounceEffect(double strength, double maxOverscroll) {
+		node.features().enableBounceEffect(strength, maxOverscroll);
+		return this;
+	}
+
+	public TableBuilder<T, V> setItems(ObservableList<T> items) {
+		node.setItems(items);
+		return this;
+	}
+
+	@SuppressWarnings("unchecked")
+	public TableBuilder<T, V> addColumns(MFXTableColumn<T>... columns) {
+		node.getTableColumns().addAll(columns);
+		return this;
+	}
+
+	@SuppressWarnings("unchecked")
+	public TableBuilder<T, V> setColumns(MFXTableColumn<T>... columns) {
+		node.getTableColumns().setAll(columns);
+		return this;
+	}
+
+	public TableBuilder<T, V> setTableRowFactory(Function<T, MFXTableRow<T>> tableRowFactory) {
+		node.setTableRowFactory(tableRowFactory);
+		return this;
+	}
+
+	public TableBuilder<T, V> setFilter(Predicate<T> filter) {
+		node.getTransformableList().setPredicate(filter);
+		return this;
+	}
+
+	public TableBuilder<T, V> setComparator(Comparator<T> comparator) {
+		node.getTransformableList().setComparator(comparator);
+		return this;
+	}
+
+	public TableBuilder<T, V> setComparator(Comparator<T> comparator, boolean isReverse) {
+		node.getTransformableList().setComparator(comparator, isReverse);
+		return this;
+	}
+
+	@SuppressWarnings("unchecked")
+	public TableBuilder<T, V> addFilters(AbstractFilter<T, ?>... filters) {
+		node.getFilters().addAll(filters);
+		return this;
+	}
+
+	@SuppressWarnings("unchecked")
+	public TableBuilder<T, V> setFilters(AbstractFilter<T, ?>... filters) {
+		node.getFilters().setAll(filters);
+		return this;
+	}
+
+	public TableBuilder<T, V> setFooterVisible(boolean footerVisible) {
+		node.setFooterVisible(footerVisible);
+		return this;
+	}
+}

+ 73 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/TableColumnBuilder.java

@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.builders.base.LabeledBuilder;
+import io.github.palexdev.materialfx.controls.MFXTableColumn;
+import io.github.palexdev.materialfx.controls.cell.MFXTableRowCell;
+import io.github.palexdev.materialfx.enums.SortState;
+
+import java.util.Comparator;
+import java.util.function.Function;
+
+public class TableColumnBuilder<T> extends LabeledBuilder<MFXTableColumn<T>> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public TableColumnBuilder() {
+		this(new MFXTableColumn<>());
+	}
+
+	public TableColumnBuilder(MFXTableColumn<T> column) {
+		super(column);
+	}
+
+	public static <T> TableColumnBuilder<T> tableColumn() {
+		return new TableColumnBuilder<>();
+	}
+
+	public static <T> TableColumnBuilder<T> tableColumn(MFXTableColumn<T> column) {
+		return new TableColumnBuilder<>(column);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public TableColumnBuilder<T> setRowCellFactory(Function<T, MFXTableRowCell<T, ?>> rowCellFactory) {
+		node.setRowCellFactory(rowCellFactory);
+		return this;
+	}
+
+	public TableColumnBuilder<T> setSortState(SortState sortState) {
+		node.setSortState(sortState);
+		return this;
+	}
+
+	public TableColumnBuilder<T> setComparator(Comparator<T> comparator) {
+		node.setComparator(comparator);
+		return this;
+	}
+
+	public TableColumnBuilder<T> setColumnResizable(boolean columnResizable) {
+		node.setColumnResizable(columnResizable);
+		return this;
+	}
+}

+ 149 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/TextFieldBuilder.java

@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.builders.base.ControlBuilder;
+import io.github.palexdev.materialfx.controls.MFXTextField;
+import io.github.palexdev.materialfx.enums.FloatMode;
+import javafx.geometry.Pos;
+import javafx.scene.Node;
+import javafx.scene.paint.Color;
+import javafx.scene.text.Font;
+
+public class TextFieldBuilder<F extends MFXTextField> extends ControlBuilder<F> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	@SuppressWarnings("unchecked")
+	public TextFieldBuilder() {
+		this((F) new MFXTextField());
+	}
+
+	public TextFieldBuilder(F control) {
+		super(control);
+	}
+
+	public static TextFieldBuilder<MFXTextField> textField() {
+		return new TextFieldBuilder<>();
+	}
+
+	public static TextFieldBuilder<MFXTextField> textField(MFXTextField textField) {
+		return new TextFieldBuilder<>(textField);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public TextFieldBuilder<F> setSelectable(boolean selectable) {
+		node.setSelectable(selectable);
+		return this;
+	}
+
+	public TextFieldBuilder<F> setLeadingIcon(Node leadingIcon) {
+		node.setLeadingIcon(leadingIcon);
+		return this;
+	}
+
+	public TextFieldBuilder<F> setTrailingIcon(Node trailingIcon) {
+		node.setTrailingIcon(trailingIcon);
+		return this;
+	}
+
+	public TextFieldBuilder<F> setFloatingText(String floatingText) {
+		node.setFloatingText(floatingText);
+		return this;
+	}
+
+	public TextFieldBuilder<F> setAllowEdit(boolean allowEdit) {
+		node.setAllowEdit(allowEdit);
+		return this;
+	}
+
+	public TextFieldBuilder<F> setAnimated(boolean animated) {
+		node.setAnimated(animated);
+		return this;
+	}
+
+	public TextFieldBuilder<F> setBorderGap(double borderGap) {
+		node.setBorderGap(borderGap);
+		return this;
+	}
+
+	public TextFieldBuilder<F> setCaretVisible(boolean caretVisible) {
+		node.setCaretVisible(caretVisible);
+		return this;
+	}
+
+	public TextFieldBuilder<F> setFloatMode(FloatMode floatMode) {
+		node.setFloatMode(floatMode);
+		return this;
+	}
+
+	public TextFieldBuilder<F> setFloatingTextGap(double floatingTextGap) {
+		node.setFloatingTextGap(floatingTextGap);
+		return this;
+	}
+
+	public TextFieldBuilder<F> setGraphicTextGap(double graphicTextGap) {
+		node.setGraphicTextGap(graphicTextGap);
+		return this;
+	}
+
+	public TextFieldBuilder<F> setScaleOnAbove(boolean scaleOnAbove) {
+		node.setScaleOnAbove(scaleOnAbove);
+		return this;
+	}
+
+	public TextFieldBuilder<F> setTextFill(Color textFill) {
+		node.setTextFill(textFill);
+		return this;
+	}
+
+	public TextFieldBuilder<F> setTextLimit(int textLimit) {
+		node.setTextLimit(textLimit);
+		return this;
+	}
+
+	public TextFieldBuilder<F> setPrefColumnCount(int prefColumnCount) {
+		node.setPrefColumnCount(prefColumnCount);
+		return this;
+	}
+
+	public TextFieldBuilder<F> setAlignment(Pos alignment) {
+		node.setAlignment(alignment);
+		return this;
+	}
+
+	public TextFieldBuilder<F> setFont(Font font) {
+		node.setFont(font);
+		return this;
+	}
+
+	public TextFieldBuilder<F> setPromptText(String promptText) {
+		node.setPromptText(promptText);
+		return this;
+	}
+
+	public TextFieldBuilder<F> setText(String text) {
+		node.setText(text);
+		return this;
+	}
+}

+ 108 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/ToggleBuilder.java

@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.builders.base.LabeledBuilder;
+import io.github.palexdev.materialfx.controls.MFXToggleButton;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.scene.control.ContentDisplay;
+import javafx.scene.control.ToggleGroup;
+import javafx.scene.paint.Color;
+
+public class ToggleBuilder extends LabeledBuilder<MFXToggleButton> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public ToggleBuilder() {
+		this(new MFXToggleButton());
+	}
+
+	public ToggleBuilder(MFXToggleButton toggleButton) {
+		super(toggleButton);
+	}
+
+	public static ToggleBuilder toggle() {
+		return new ToggleBuilder();
+	}
+
+	public static ToggleBuilder toggle(MFXToggleButton toggleButton) {
+		return new ToggleBuilder(toggleButton);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public ToggleBuilder setToggleGroup(ToggleGroup toggleGroup) {
+		node.setToggleGroup(toggleGroup);
+		return this;
+	}
+
+	public ToggleBuilder setSelected(boolean selected) {
+		node.setSelected(selected);
+		return this;
+	}
+
+	public ToggleBuilder setOnAction(EventHandler<ActionEvent> onAction) {
+		node.setOnAction(onAction);
+		return this;
+	}
+
+	public ToggleBuilder setContentDisposition(ContentDisplay contentDisposition) {
+		node.setContentDisposition(contentDisposition);
+		return this;
+	}
+
+	public ToggleBuilder setGap(double gap) {
+		node.setGap(gap);
+		return this;
+	}
+
+	public ToggleBuilder setLength(double length) {
+		node.setLength(length);
+		return this;
+	}
+
+	public ToggleBuilder setRadius(double radius) {
+		node.setRadius(radius);
+		return this;
+	}
+
+	public ToggleBuilder setTextExpand(boolean textExpand) {
+		node.setTextExpand(textExpand);
+		return this;
+	}
+
+	public ToggleBuilder setMainColor(Color color) {
+		node.setMainColor(color);
+		return this;
+	}
+
+	public ToggleBuilder setSecondaryColor(Color color) {
+		node.setSecondaryColor(color);
+		return this;
+	}
+
+	public ToggleBuilder setColors(Color main, Color secondary) {
+		node.setColors(main, secondary);
+		return this;
+	}
+}

+ 125 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/control/TooltipBuilder.java

@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.control;
+
+import io.github.palexdev.materialfx.beans.PositionBean;
+import io.github.palexdev.materialfx.controls.MFXTooltip;
+import javafx.animation.Animation;
+import javafx.scene.Node;
+import javafx.scene.Parent;
+import javafx.scene.transform.Scale;
+import javafx.util.Duration;
+
+import java.util.function.BiFunction;
+import java.util.function.Consumer;
+
+public class TooltipBuilder {
+	//================================================================================
+	// Properties
+	//================================================================================
+	private final MFXTooltip tooltip;
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public TooltipBuilder(Node owner) {
+		this(new MFXTooltip(owner));
+	}
+
+	public TooltipBuilder(MFXTooltip tooltip) {
+		this.tooltip = tooltip;
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public static MFXTooltip of(Node owner, String text) {
+		return MFXTooltip.of(owner, text);
+	}
+
+	public static void disposeFor(Node node) {
+		MFXTooltip.disposeFor(node);
+	}
+
+	public TooltipBuilder setPopupStyleableParent(Parent parent) {
+		tooltip.setPopupStyleableParent(parent);
+		return this;
+	}
+
+	public TooltipBuilder addStylesheet(String... stylesheets) {
+		tooltip.getStyleSheets().addAll(stylesheets);
+		return this;
+	}
+
+	public TooltipBuilder setStylesheet(String... stylesheets) {
+		tooltip.getStyleSheets().setAll(stylesheets);
+		return this;
+	}
+
+	public TooltipBuilder setAnimationProvider(BiFunction<Node, Scale, Animation> animationProvider) {
+		tooltip.setAnimationProvider(animationProvider);
+		return this;
+	}
+
+	public TooltipBuilder setAnimated(boolean animated) {
+		tooltip.setAnimated(animated);
+		return this;
+	}
+
+	public TooltipBuilder install() {
+		tooltip.install();
+		return this;
+	}
+
+	public TooltipBuilder uninstall() {
+		tooltip.uninstall();
+		return this;
+	}
+
+	public TooltipBuilder dispose() {
+		tooltip.dispose();
+		return this;
+	}
+
+	public TooltipBuilder setShowAction(Consumer<PositionBean> showAction) {
+		tooltip.setShowAction(showAction);
+		return this;
+	}
+
+	public TooltipBuilder setIcon(Node icon) {
+		tooltip.setIcon(icon);
+		return this;
+	}
+
+	public TooltipBuilder setText(String text) {
+		tooltip.setText(text);
+		return this;
+	}
+
+	public TooltipBuilder setShowDelay(Duration showDelay) {
+		tooltip.setShowDelay(showDelay);
+		return this;
+	}
+
+	public TooltipBuilder setHideAfter(Duration hideAfter) {
+		tooltip.setHideAfter(hideAfter);
+		return this;
+	}
+}

+ 82 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/AnchorPaneBuilder.java

@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.layout;
+
+import javafx.geometry.Insets;
+import javafx.scene.Node;
+import javafx.scene.layout.AnchorPane;
+
+public class AnchorPaneBuilder extends PaneBuilder<AnchorPane> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public AnchorPaneBuilder() {
+		this(new AnchorPane());
+	}
+
+	public AnchorPaneBuilder(AnchorPane pane) {
+		super(pane);
+	}
+
+	public static AnchorPaneBuilder anchorPane() {
+		return new AnchorPaneBuilder();
+	}
+
+	public static AnchorPaneBuilder anchorPane(AnchorPane pane) {
+		return new AnchorPaneBuilder(pane);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public AnchorPaneBuilder setAllConstraints(Node child, Insets constraints) {
+		setTopAnchor(child, constraints.getTop());
+		setRightAnchor(child, constraints.getRight());
+		setBottomAnchor(child, constraints.getBottom());
+		setLeftAnchor(child, constraints.getLeft());
+		return this;
+	}
+
+	public AnchorPaneBuilder setTopAnchor(Node child, double top) {
+		AnchorPane.setTopAnchor(child, top);
+		return this;
+	}
+
+	public AnchorPaneBuilder setRightAnchor(Node child, double right) {
+		AnchorPane.setRightAnchor(child, right);
+		return this;
+	}
+
+	public AnchorPaneBuilder setBottomAnchor(Node child, double bottom) {
+		AnchorPane.setBottomAnchor(child, bottom);
+		return this;
+	}
+
+	public AnchorPaneBuilder setLeftAnchor(Node child, double left) {
+		AnchorPane.setLeftAnchor(child, left);
+		return this;
+	}
+
+	public AnchorPaneBuilder clearConstraints(Node child) {
+		AnchorPane.clearConstraints(child);
+		return this;
+	}
+}

+ 77 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/BackgroundBuilder.java

@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.layout;
+
+import javafx.geometry.Insets;
+import javafx.scene.image.Image;
+import javafx.scene.layout.*;
+import javafx.scene.paint.Paint;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BackgroundBuilder {
+	//================================================================================
+	// Properties
+	//================================================================================
+	private final List<BackgroundFill> fills = new ArrayList<>();
+	private final List<BackgroundImage> images = new ArrayList<>();
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public static BackgroundBuilder build() {
+		return new BackgroundBuilder();
+	}
+
+	//================================================================================
+	// Methods
+	//================================================================================
+	public BackgroundBuilder addFill(BackgroundFill fill) {
+		fills.add(fill);
+		return this;
+	}
+
+	public BackgroundBuilder addFill(Paint fill) {
+		return addFill(fill, CornerRadii.EMPTY);
+	}
+
+	public BackgroundBuilder addFill(Paint fill, CornerRadii cornerRadii) {
+		return addFill(fill, cornerRadii, Insets.EMPTY);
+	}
+
+	public BackgroundBuilder addFill(Paint fill, CornerRadii cornerRadii, Insets insets) {
+		fills.add(new BackgroundFill(fill, cornerRadii, insets));
+		return this;
+	}
+
+	public BackgroundBuilder addImage(BackgroundImage image) {
+		images.add(image);
+		return this;
+	}
+
+	public BackgroundBuilder addImage(Image image, BackgroundRepeat repeatX, BackgroundRepeat repeatY, BackgroundPosition position, BackgroundSize size) {
+		images.add(new BackgroundImage(image, repeatX, repeatY, position, size));
+		return this;
+	}
+
+	public Background get() {
+		return new Background(fills, images);
+	}
+}

+ 69 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/BorderBuilder.java

@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.layout;
+
+import javafx.geometry.Insets;
+import javafx.scene.image.Image;
+import javafx.scene.layout.*;
+import javafx.scene.paint.Paint;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BorderBuilder {
+	//================================================================================
+	// Properties
+	//================================================================================
+	private final List<BorderStroke> strokes = new ArrayList<>();
+	private final List<BorderImage> images = new ArrayList<>();
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public static BorderBuilder build() {
+		return new BorderBuilder();
+	}
+
+	//================================================================================
+	// Methods
+	//================================================================================
+	public BorderBuilder addFill(BorderStroke stroke) {
+		strokes.add(stroke);
+		return this;
+	}
+
+	public BorderBuilder addFill(Paint stroke, BorderStrokeStyle style, CornerRadii cornerRadii, BorderWidths widths, Insets insets) {
+		strokes.add(new BorderStroke(stroke, style, cornerRadii, widths, insets));
+		return this;
+	}
+
+	public BorderBuilder addImage(BorderImage image) {
+		images.add(image);
+		return this;
+	}
+
+	public BorderBuilder addImage(Image image, BorderWidths widths, Insets insets, BorderWidths slices, boolean filled, BorderRepeat repeatX, BorderRepeat repeatY) {
+		images.add(new BorderImage(image, widths, insets, slices, filled, repeatX, repeatY));
+		return this;
+	}
+
+	public Border get() {
+		return new Border(strokes, images);
+	}
+}

+ 89 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/BorderPaneBuilder.java

@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.layout;
+
+import javafx.geometry.Insets;
+import javafx.geometry.Pos;
+import javafx.scene.Node;
+import javafx.scene.layout.BorderPane;
+
+public class BorderPaneBuilder extends PaneBuilder<BorderPane> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public BorderPaneBuilder() {
+		this(new BorderPane());
+	}
+
+	public BorderPaneBuilder(BorderPane pane) {
+		super(pane);
+	}
+
+	public static BorderPaneBuilder borderPane() {
+		return new BorderPaneBuilder();
+	}
+
+	public static BorderPaneBuilder borderPane(BorderPane pane) {
+		return new BorderPaneBuilder(pane);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+	public BorderPaneBuilder setAlignment(Node child, Pos pos) {
+		BorderPane.setAlignment(child, pos);
+		return this;
+	}
+
+	public BorderPaneBuilder setMargin(Node child, Insets margin) {
+		BorderPane.setMargin(child, margin);
+		return this;
+	}
+
+	public BorderPaneBuilder clearConstraints(Node child) {
+		BorderPane.clearConstraints(child);
+		return this;
+	}
+
+	public BorderPaneBuilder setCenter(Node center) {
+		node.setCenter(center);
+		return this;
+	}
+
+	public BorderPaneBuilder setTop(Node top) {
+		node.setTop(top);
+		return this;
+	}
+
+	public BorderPaneBuilder setRight(Node right) {
+		node.setRight(right);
+		return this;
+	}
+
+	public BorderPaneBuilder setBottom(Node bottom) {
+		node.setBottom(bottom);
+		return this;
+	}
+
+	public BorderPaneBuilder setLeft(Node left) {
+		node.setLeft(left);
+		return this;
+	}
+}

+ 93 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/FlowPaneBuilder.java

@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.layout;
+
+import javafx.geometry.*;
+import javafx.scene.Node;
+import javafx.scene.layout.FlowPane;
+
+public class FlowPaneBuilder extends PaneBuilder<FlowPane> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public FlowPaneBuilder() {
+		this(new FlowPane());
+	}
+
+	public FlowPaneBuilder(FlowPane pane) {
+		super(pane);
+	}
+
+	public static FlowPaneBuilder flowPane() {
+		return new FlowPaneBuilder();
+	}
+
+	public static FlowPaneBuilder flowPane(FlowPane pane) {
+		return new FlowPaneBuilder(pane);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+	public FlowPaneBuilder setMargin(Node child, Insets margin) {
+		FlowPane.setMargin(child, margin);
+		return this;
+	}
+
+	public FlowPaneBuilder clearConstraints(Node child) {
+		FlowPane.clearConstraints(child);
+		return this;
+	}
+
+	public FlowPaneBuilder setOrientation(Orientation orientation) {
+		node.setOrientation(orientation);
+		return this;
+	}
+
+	public FlowPaneBuilder setHGap(double hGap) {
+		node.setHgap(hGap);
+		return this;
+	}
+
+	public FlowPaneBuilder setVGap(double vGap) {
+		node.setVgap(vGap);
+		return this;
+	}
+
+	public FlowPaneBuilder setPrefWrapLength(double prefWrapLength) {
+		node.setPrefWrapLength(prefWrapLength);
+		return this;
+	}
+
+	public FlowPaneBuilder setAlignment(Pos alignment) {
+		node.setAlignment(alignment);
+		return this;
+	}
+
+	public FlowPaneBuilder setColumnHAlignment(HPos columnHAlignment) {
+		node.setColumnHalignment(columnHAlignment);
+		return this;
+	}
+
+	public FlowPaneBuilder setRowVAlignment(VPos rowVAlignment) {
+		node.setRowValignment(rowVAlignment);
+		return this;
+	}
+}

+ 200 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/GridPaneBuilder.java

@@ -0,0 +1,200 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.layout;
+
+import javafx.geometry.HPos;
+import javafx.geometry.Insets;
+import javafx.geometry.Pos;
+import javafx.geometry.VPos;
+import javafx.scene.Node;
+import javafx.scene.layout.ColumnConstraints;
+import javafx.scene.layout.GridPane;
+import javafx.scene.layout.Priority;
+import javafx.scene.layout.RowConstraints;
+
+public class GridPaneBuilder extends PaneBuilder<GridPane> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public GridPaneBuilder() {
+		this(new GridPane());
+	}
+
+	public GridPaneBuilder(GridPane pane) {
+		super(pane);
+	}
+
+	public static GridPaneBuilder gridPane() {
+		return new GridPaneBuilder();
+	}
+
+	public static GridPaneBuilder gridPane(GridPane pane) {
+		return new GridPaneBuilder(pane);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public GridPaneBuilder setRowIndex(Node child, int rowIndex) {
+		GridPane.setRowIndex(child, rowIndex);
+		return this;
+	}
+
+	public GridPaneBuilder setColumnIndex(Node child, int columnIndex) {
+		GridPane.setColumnIndex(child, columnIndex);
+		return this;
+	}
+
+	public GridPaneBuilder setRowSpan(Node child, int rowSpan) {
+		GridPane.setRowSpan(child, rowSpan);
+		return this;
+	}
+
+	public GridPaneBuilder setColumnSpan(Node child, int columnSpan) {
+		GridPane.setColumnSpan(child, columnSpan);
+		return this;
+	}
+
+	public GridPaneBuilder setMargin(Node child, Insets margin) {
+		GridPane.setMargin(child, margin);
+		return this;
+	}
+
+	public GridPaneBuilder setHAlignment(Node child, HPos hPos) {
+		GridPane.setHalignment(child, hPos);
+		return this;
+	}
+
+	public GridPaneBuilder setVAlignment(Node child, VPos vPos) {
+		GridPane.setValignment(child, vPos);
+		return this;
+	}
+
+	public GridPaneBuilder setHGrow(Node child, Priority priority) {
+		GridPane.setHgrow(child, priority);
+		return this;
+	}
+
+	public GridPaneBuilder setVGrow(Node child, Priority priority) {
+		GridPane.setVgrow(child, priority);
+		return this;
+	}
+
+	public GridPaneBuilder setFillWidth(Node child, boolean fillWidth) {
+		GridPane.setFillWidth(child, fillWidth);
+		return this;
+	}
+
+	public GridPaneBuilder setFillHeight(Node child, boolean fillHeight) {
+		GridPane.setFillHeight(child, fillHeight);
+		return this;
+	}
+
+	public GridPaneBuilder setConstraints(Node child, int columnIndex, int rowIndex) {
+		GridPane.setConstraints(child, columnIndex, rowIndex);
+		return this;
+	}
+
+	public GridPaneBuilder setConstraints(Node child, int columnIndex, int rowIndex, int columnSpan, int rowspan) {
+		GridPane.setConstraints(child, columnIndex, rowIndex, columnSpan, rowspan);
+		return this;
+	}
+
+	public GridPaneBuilder setConstraints(Node child, int columnIndex, int rowIndex, int columnSpan, int rowspan, HPos hAlignment, VPos vAlignment) {
+		GridPane.setConstraints(child, columnIndex, rowIndex, columnSpan, rowspan, hAlignment, vAlignment);
+		return this;
+	}
+
+	public GridPaneBuilder setConstraints(Node child, int columnIndex, int rowIndex, int columnSpan, int rowspan, HPos hAlignment, VPos vAlignment, Priority hGrow, Priority vGrow) {
+		GridPane.setConstraints(child, columnIndex, rowIndex, columnSpan, rowspan, hAlignment, vAlignment, hGrow, vGrow);
+		return this;
+	}
+
+	public GridPaneBuilder setConstraints(Node child, int columnIndex, int rowIndex, int columnSpan, int rowspan, HPos hAlignment, VPos vAlignment, Priority hGrow, Priority vGrow, Insets margin) {
+		GridPane.setConstraints(child, columnIndex, rowIndex, columnSpan, rowspan, hAlignment, vAlignment, hGrow, vGrow, margin);
+		return this;
+	}
+
+	public GridPaneBuilder clearConstraints(Node child) {
+		GridPane.clearConstraints(child);
+		return this;
+	}
+
+	public GridPaneBuilder setHGap(double hGap) {
+		node.setHgap(hGap);
+		return this;
+	}
+
+	public GridPaneBuilder setVGap(double vGap) {
+		node.setVgap(vGap);
+		return this;
+	}
+
+	public GridPaneBuilder setAlignment(Pos alignment) {
+		node.setAlignment(alignment);
+		return this;
+	}
+
+	public GridPaneBuilder setGridLinesVisible(boolean gridLinesVisible) {
+		node.setGridLinesVisible(gridLinesVisible);
+		return this;
+	}
+
+	public GridPaneBuilder addRowConstraints(RowConstraints... constraints) {
+		node.getRowConstraints().addAll(constraints);
+		return this;
+	}
+
+	public GridPaneBuilder setRowConstraints(RowConstraints... constraints) {
+		node.getRowConstraints().setAll(constraints);
+		return this;
+	}
+
+	public GridPaneBuilder addColumnConstraints(ColumnConstraints... constraints) {
+		node.getColumnConstraints().addAll(constraints);
+		return this;
+	}
+
+	public GridPaneBuilder setColumnConstraints(ColumnConstraints... constraints) {
+		node.getColumnConstraints().setAll(constraints);
+		return this;
+	}
+
+	public GridPaneBuilder add(Node child, int columnIndex, int rowIndex) {
+		node.add(child, columnIndex, rowIndex);
+		return this;
+	}
+
+	public GridPaneBuilder add(Node child, int columnIndex, int rowIndex, int colspan, int rowspan) {
+		node.add(child, columnIndex, rowIndex, colspan, rowspan);
+		return this;
+	}
+
+	public GridPaneBuilder addRow(int rowIndex, Node... children) {
+		node.addRow(rowIndex, children);
+		return this;
+	}
+
+	public GridPaneBuilder addColumn(int columnIndex, Node... children) {
+		node.addColumn(columnIndex, children);
+		return this;
+	}
+}

+ 81 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/HBoxBuilder.java

@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.layout;
+
+import javafx.geometry.Insets;
+import javafx.geometry.Pos;
+import javafx.scene.Node;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.Priority;
+
+public class HBoxBuilder extends PaneBuilder<HBox> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public HBoxBuilder() {
+		this(new HBox());
+	}
+
+	public HBoxBuilder(HBox pane) {
+		super(pane);
+	}
+
+	public static HBoxBuilder hBox() {
+		return new HBoxBuilder();
+	}
+
+	public static HBoxBuilder hBox(HBox pane) {
+		return new HBoxBuilder(pane);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public HBoxBuilder setHGrow(Node child, Priority priority) {
+		HBox.setHgrow(child, priority);
+		return this;
+	}
+
+	public HBoxBuilder setMargin(Node child, Insets margin) {
+		HBox.setMargin(child, margin);
+		return this;
+	}
+
+	public HBoxBuilder clearConstraints(Node child) {
+		HBox.clearConstraints(child);
+		return this;
+	}
+
+	public HBoxBuilder setSpacing(double spacing) {
+		node.setSpacing(spacing);
+		return this;
+	}
+
+	public HBoxBuilder setAlignment(Pos alignment) {
+		node.setAlignment(alignment);
+		return this;
+	}
+
+	public HBoxBuilder setFillHeight(boolean fillHeight) {
+		node.setFillHeight(fillHeight);
+		return this;
+	}
+}

+ 229 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/NodeBuilder.java

@@ -0,0 +1,229 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.layout;
+
+import io.github.palexdev.materialfx.builders.base.INodeBuilder;
+import javafx.css.PseudoClass;
+import javafx.event.Event;
+import javafx.event.EventHandler;
+import javafx.event.EventType;
+import javafx.geometry.NodeOrientation;
+import javafx.scene.CacheHint;
+import javafx.scene.Cursor;
+import javafx.scene.Node;
+import javafx.scene.effect.Effect;
+
+public class NodeBuilder<N extends Node> implements INodeBuilder<N> {
+	//================================================================================
+	// Properties
+	//================================================================================
+	protected final N node;
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public NodeBuilder(N node) {
+		this.node = node;
+	}
+
+	public static NodeBuilder<Node> node(Node node) {
+		return new NodeBuilder<>(node);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+	public NodeBuilder<N> setId(String id) {
+		node.setId(id);
+		return this;
+	}
+
+	public NodeBuilder<N> setStyle(String style) {
+		node.setStyle(style);
+		return this;
+	}
+	
+	public NodeBuilder<N> addStyleClasses(String... styleClasses) {
+		node.getStyleClass().addAll(styleClasses);
+		return this;
+	}
+	
+	public NodeBuilder<N> setStyleClasses(String... styleClasses) {
+		node.getStyleClass().setAll(styleClasses);
+		return this;
+	}
+
+	public NodeBuilder<N> pseudoClassStateChanged(PseudoClass pseudoClass, boolean active) {
+		node.pseudoClassStateChanged(pseudoClass, active);
+		return this;
+	}
+
+	public NodeBuilder<N> setVisible(boolean visible) {
+		node.setVisible(visible);
+		return this;
+	}
+
+	public NodeBuilder<N> setCursor(Cursor cursor) {
+		node.setCursor(cursor);
+		return this;
+	}
+
+	public NodeBuilder<N> setOpacity(double opacity) {
+		node.setOpacity(opacity);
+		return this;
+	}
+
+	public NodeBuilder<N> setClip(Node clip) {
+		node.setClip(clip);
+		return this;
+	}
+
+	public NodeBuilder<N> setCache(boolean cache) {
+		node.setCache(cache);
+		return this;
+	}
+
+	public NodeBuilder<N> setCacheHint(CacheHint cacheHint) {
+		node.setCacheHint(cacheHint);
+		return this;
+	}
+
+	public NodeBuilder<N> setEffect(Effect effect) {
+		node.setEffect(effect);
+		return this;
+	}
+
+	public NodeBuilder<N> setDisable(boolean disable) {
+		node.setDisable(disable);
+		return this;
+	}
+
+	public NodeBuilder<N> setManaged(boolean managed) {
+		node.setManaged(managed);
+		return this;
+	}
+
+	public NodeBuilder<N> relocate(double x, double y) {
+		node.relocate(x, y);
+		return this;
+	}
+
+	public NodeBuilder<N> resize(double width, double height) {
+		node.resize(width, height);
+		return this;
+	}
+
+	public NodeBuilder<N> resizeRelocate(double x, double y, double width, double height) {
+		node.resizeRelocate(x, y, width, height);
+		return this;
+	}
+
+	public NodeBuilder<N> autosize() {
+		node.autosize();
+		return this;
+	}
+
+	public NodeBuilder<N> setViewOrder(double viewOrder) {
+		node.setViewOrder(viewOrder);
+		return this;
+	}
+
+	public NodeBuilder<N> setTranslateX(double translateX) {
+		node.setTranslateX(translateX);
+		return this;
+	}
+
+	public NodeBuilder<N> setTranslateY(double translateY) {
+		node.setTranslateY(translateY);
+		return this;
+	}
+
+	public NodeBuilder<N> setTranslateZ(double translateZ) {
+		node.setTranslateZ(translateZ);
+		return this;
+	}
+
+	public NodeBuilder<N> setScaleX(double scaleX) {
+		node.setScaleX(scaleX);
+		return this;
+	}
+
+	public NodeBuilder<N> setScaleY(double scaleY) {
+		node.setScaleY(scaleY);
+		return this;
+	}
+
+	public NodeBuilder<N> setScaleZ(double scaleZ) {
+		node.setScaleZ(scaleZ);
+		return this;
+	}
+
+	public NodeBuilder<N> setRotate(double rotate) {
+		node.setRotate(rotate);
+		return this;
+	}
+
+	public NodeBuilder<N> setNodeOrientation(NodeOrientation orientation) {
+		node.setNodeOrientation(orientation);
+		return this;
+	}
+
+	public NodeBuilder<N> setMouseTransparent(boolean mouseTransparent) {
+		node.setMouseTransparent(mouseTransparent);
+		return this;
+	}
+
+	public NodeBuilder<N> setFocusTraversable(boolean focusTraversable) {
+		node.setFocusTraversable(focusTraversable);
+		return this;
+	}
+
+	public NodeBuilder<N> requestFocus() {
+		node.requestFocus();
+		return this;
+	}
+
+	public <T extends Event> NodeBuilder<N> addEventHandler(EventType<T> eventType, EventHandler<? super T> eventHandler) {
+		node.addEventHandler(eventType, eventHandler);
+		return this;
+	}
+
+	public <T extends Event> NodeBuilder<N> removeEventHandler(EventType<T> eventType, EventHandler<? super T> eventHandler) {
+		node.removeEventHandler(eventType, eventHandler);
+		return this;
+	}
+
+	public <T extends Event> NodeBuilder<N> addEventFilter(EventType<T> eventType, EventHandler<? super T> eventFilter) {
+		node.addEventFilter(eventType, eventFilter);
+		return this;
+	}
+
+	public <T extends Event> NodeBuilder<N> removeEventFilter(EventType<T> eventType, EventHandler<? super T> eventFilter) {
+		node.removeEventFilter(eventType, eventFilter);
+		return this;
+	}
+
+	//================================================================================
+	// Overridden Methods
+	//================================================================================
+	@Override
+	public N getNode() {
+		return node;
+	}
+}

+ 63 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/PaneBuilder.java

@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.layout;
+
+import javafx.scene.Node;
+import javafx.scene.layout.Pane;
+
+public class PaneBuilder<P extends Pane> extends RegionBuilder<P> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	@SuppressWarnings("unchecked")
+	public PaneBuilder() {
+		this((P) new Pane());
+	}
+
+	public PaneBuilder(P pane) {
+		super(pane);
+	}
+
+	public static PaneBuilder<Pane> pane() {
+		return new PaneBuilder<>();
+	}
+
+	public static PaneBuilder<Pane> pane(Pane pane) {
+		return new PaneBuilder<>(pane);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+	public PaneBuilder<P> addChildren(Node... children) {
+		node.getChildren().addAll(children);
+		return this;
+	}
+
+	public PaneBuilder<P> setChildren(Node... children) {
+		node.getChildren().setAll(children);
+		return this;
+	}
+
+	public PaneBuilder<P> removeChildren(Node... children) {
+		node.getChildren().removeAll(children);
+		return this;
+	}
+}

+ 53 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/ParentBuilder.java

@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.layout;
+
+import javafx.scene.Parent;
+
+public class ParentBuilder<P extends Parent> extends NodeBuilder<P> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public ParentBuilder(P parent) {
+		super(parent);
+	}
+
+	public static ParentBuilder<Parent> parent(Parent parent) {
+		return new ParentBuilder<>(parent);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+	public ParentBuilder<P> requestLayout() {
+		node.requestLayout();
+		return this;
+	}
+
+	public ParentBuilder<P> addStylesheets(String... stylesheets) {
+		node.getStylesheets().addAll(stylesheets);
+		return this;
+	}
+
+	public ParentBuilder<P> setStylesheets(String... stylesheets) {
+		node.getStylesheets().setAll(stylesheets);
+		return this;
+	}
+}

+ 136 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/RegionBuilder.java

@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.layout;
+
+import javafx.geometry.Insets;
+import javafx.scene.layout.Background;
+import javafx.scene.layout.Border;
+import javafx.scene.layout.Region;
+import javafx.scene.shape.Shape;
+
+public class RegionBuilder<R extends Region> extends ParentBuilder<R> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	@SuppressWarnings("unchecked")
+	public RegionBuilder() {
+		this((R) new Region());
+	}
+	
+	public RegionBuilder(R region) {
+		super(region);
+	}
+
+	public static RegionBuilder<Region> region() {
+		return new RegionBuilder<>();
+	}
+	
+	public static RegionBuilder<Region> region(Region region) {
+		return new RegionBuilder<>(region);
+	}
+	
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+	public RegionBuilder<R> setSnapToPixel(boolean snapToPixel) {
+		node.setSnapToPixel(snapToPixel);
+		return this;
+	}
+
+	public RegionBuilder<R> setPadding(Insets padding) {
+		node.setPadding(padding);
+		return this;
+	}
+
+	public RegionBuilder<R> setBackground(Background background) {
+		node.setBackground(background);
+		return this;
+	}
+
+	public RegionBuilder<R> setBorder(Border border) {
+		node.setBorder(border);
+		return this;
+	}
+
+	public RegionBuilder<R> setMinWidth(double minWidth) {
+		node.setMinWidth(minWidth);
+		return this;
+	}
+
+	public RegionBuilder<R> setMinHeight(double minHeight) {
+		node.setMinHeight(minHeight);
+		return this;
+	}
+
+	public RegionBuilder<R> setMinSize(double minWidth, double minHeight) {
+		node.setMinSize(minWidth, minHeight);
+		return this;
+	}
+
+	public RegionBuilder<R> setPrefWidth(double prefWidth) {
+		node.setPrefWidth(prefWidth);
+		return this;
+	}
+
+	public RegionBuilder<R> setPrefHeight(double prefHeight) {
+		node.setPrefHeight(prefHeight);
+		return this;
+	}
+
+	public RegionBuilder<R> setPrefSize(double prefWidth, double prefHeight) {
+		node.setPrefSize(prefWidth, prefHeight);
+		return this;
+	}
+
+	public RegionBuilder<R> setMaxWidth(double maxWidth) {
+		node.setMaxWidth(maxWidth);
+		return this;
+	}
+
+	public RegionBuilder<R> setMaxHeight(double maxHeight) {
+		node.setMaxHeight(maxHeight);
+		return this;
+	}
+
+	public RegionBuilder<R> setMaxSize(double maxWidth, double maxHeight) {
+		node.setMaxSize(maxWidth, maxHeight);
+		return this;
+	}
+
+	public RegionBuilder<R> setShape(Shape value) {
+		node.setShape(value);
+		return this;
+	}
+
+	public RegionBuilder<R> setScaleShape(boolean scaleShape) {
+		node.setScaleShape(scaleShape);
+		return this;
+	}
+
+	public RegionBuilder<R> setCenterShape(boolean centerShape) {
+		node.setCenterShape(centerShape);
+		return this;
+	}
+
+	public RegionBuilder<R> setCacheShape(boolean cacheShape) {
+		node.setCacheShape(cacheShape);
+		return this;
+	}
+}

+ 70 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/StackPaneBuilder.java

@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.layout;
+
+import javafx.geometry.Insets;
+import javafx.geometry.Pos;
+import javafx.scene.Node;
+import javafx.scene.layout.StackPane;
+
+public class StackPaneBuilder extends PaneBuilder<StackPane> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public StackPaneBuilder() {
+		this(new StackPane());
+	}
+
+	public StackPaneBuilder(StackPane pane) {
+		super(pane);
+	}
+
+	public static StackPaneBuilder stackPane() {
+		return new StackPaneBuilder();
+	}
+
+	public static StackPaneBuilder stackPane(StackPane pane) {
+		return new StackPaneBuilder(pane);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public StackPaneBuilder setAlignment(Node child, Pos alignment) {
+		StackPane.setAlignment(child, alignment);
+		return this;
+	}
+
+	public StackPaneBuilder setMargin(Node child, Insets margin) {
+		StackPane.setMargin(child, margin);
+		return this;
+	}
+
+	public StackPaneBuilder clearConstraints(Node child) {
+		StackPane.clearConstraints(child);
+		return this;
+	}
+
+	public StackPaneBuilder setAlignment(Pos alignment) {
+		node.setAlignment(alignment);
+		return this;
+	}
+}

+ 105 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/TilePaneBuilder.java

@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.layout;
+
+import javafx.geometry.Insets;
+import javafx.geometry.Pos;
+import javafx.scene.Node;
+import javafx.scene.layout.TilePane;
+
+public class TilePaneBuilder extends PaneBuilder<TilePane> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public TilePaneBuilder() {
+		this(new TilePane());
+	}
+
+	public TilePaneBuilder(TilePane pane) {
+		super(pane);
+	}
+
+	public static TilePaneBuilder tilePane() {
+		return new TilePaneBuilder();
+	}
+
+	public static TilePaneBuilder tilePane(TilePane pane) {
+		return new TilePaneBuilder(pane);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public TilePaneBuilder setAlignment(Node node, Pos alignment) {
+		TilePane.setAlignment(node, alignment);
+		return this;
+	}
+
+	public TilePaneBuilder setMargin(Node node, Insets margin) {
+		TilePane.setMargin(node, margin);
+		return this;
+	}
+
+	public TilePaneBuilder clearConstraints(Node child) {
+		TilePane.clearConstraints(child);
+		return this;
+	}
+
+	public TilePaneBuilder setPrefRows(int prefRows) {
+		node.setPrefRows(prefRows);
+		return this;
+	}
+
+	public TilePaneBuilder setPrefColumns(int prefColumns) {
+		node.setPrefColumns(prefColumns);
+		return this;
+	}
+
+	public TilePaneBuilder setPrefTileWidth(double prefTileWidth) {
+		node.setPrefTileWidth(prefTileWidth);
+		return this;
+	}
+
+	public TilePaneBuilder setPrefTileHeight(double prefTileHeight) {
+		node.setPrefTileHeight(prefTileHeight);
+		return this;
+	}
+
+	public TilePaneBuilder setHGap(double hGap) {
+		node.setHgap(hGap);
+		return this;
+	}
+
+	public TilePaneBuilder setVGap(double vGap) {
+		node.setVgap(vGap);
+		return this;
+	}
+
+	public TilePaneBuilder setAlignment(Pos alignment) {
+		node.setAlignment(alignment);
+		return this;
+	}
+
+	public TilePaneBuilder setTileAlignment(Pos tileAlignment) {
+		node.setTileAlignment(tileAlignment);
+		return this;
+	}
+}

+ 81 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/builders/layout/VBoxBuilder.java

@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.builders.layout;
+
+import javafx.geometry.Insets;
+import javafx.geometry.Pos;
+import javafx.scene.Node;
+import javafx.scene.layout.Priority;
+import javafx.scene.layout.VBox;
+
+public class VBoxBuilder extends PaneBuilder<VBox> {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	public VBoxBuilder() {
+		this(new VBox());
+	}
+
+	public VBoxBuilder(VBox pane) {
+		super(pane);
+	}
+
+	public static VBoxBuilder vBox() {
+		return new VBoxBuilder();
+	}
+
+	public static VBoxBuilder vBox(VBox pane) {
+		return new VBoxBuilder(pane);
+	}
+
+	//================================================================================
+	// Delegate Methods
+	//================================================================================
+
+	public VBoxBuilder setVGrow(Node child, Priority priority) {
+		VBox.setVgrow(child, priority);
+		return this;
+	}
+
+	public VBoxBuilder setMargin(Node child, Insets margin) {
+		VBox.setMargin(child, margin);
+		return this;
+	}
+
+	public VBoxBuilder clearConstraints(Node child) {
+		VBox.clearConstraints(child);
+		return this;
+	}
+
+	public VBoxBuilder setSpacing(double spacing) {
+		node.setSpacing(spacing);
+		return this;
+	}
+
+	public VBoxBuilder setAlignment(Pos alignment) {
+		node.setAlignment(alignment);
+		return this;
+	}
+
+	public VBoxBuilder setFillWidth(boolean fillWidth) {
+		node.setFillWidth(fillWidth);
+		return this;
+	}
+}

+ 71 - 0
materialfx/src/main/java/io/github/palexdev/materialfx/factories/CornerRadiusFactory.java

@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2022 Parisi Alessandro
+ * This file is part of MaterialFX (https://github.com/palexdev/MaterialFX).
+ *
+ * MaterialFX is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MaterialFX is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with MaterialFX.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package io.github.palexdev.materialfx.factories;
+
+import javafx.scene.layout.CornerRadii;
+
+/**
+ * Convenience class to build {@link CornerRadii} objects.
+ */
+public class CornerRadiusFactory {
+
+	//================================================================================
+	// Constructors
+	//================================================================================
+	private CornerRadiusFactory() {}
+
+	//================================================================================
+	// Static Methods
+	//================================================================================
+	public static CornerRadii all(double topRightBottomLeft) {
+		return new CornerRadii(topRightBottomLeft);
+	}
+
+	public static CornerRadii none() {
+		return CornerRadii.EMPTY;
+	}
+
+	public static CornerRadii top(double topLeft) {
+		return new CornerRadii(topLeft, 0, 0, 0, false);
+	}
+
+	public static CornerRadii right(double topRight) {
+		return new CornerRadii(0, topRight, 0, 0, false);
+	}
+
+	public static CornerRadii bottom(double bottomRight) {
+		return new CornerRadii(0, 0, bottomRight, 0, false);
+	}
+
+	public static CornerRadii left(double bottomLeft) {
+		return new CornerRadii(0, 0, 0, bottomLeft, false);
+	}
+
+	public static CornerRadii of(double topLeft, double topRight) {
+		return new CornerRadii(topLeft, topRight, 0, 0, false);
+	}
+
+	public static CornerRadii of(double topLeft, double topRight, double bottomRight) {
+		return new CornerRadii(topLeft, topRight, bottomRight, 0, false);
+	}
+
+	public static CornerRadii of(double topLeft, double topRight, double bottomRight, double bottomLeft) {
+		return new CornerRadii(topLeft, topRight, bottomRight, bottomLeft, false);
+	}
+}