class ColumnPane extends BorderPane {
	protected final GridPane grid = new GridPane();
	protected int row;

	/**
	 * Setup grid.
	 *
	 * @param insets
	 * 		Padding between container and border.
	 * @param leftPercent
	 * 		Percent of the space for the left column to fill.
	 * @param rightPercent
	 * 		Percent of the space for right column to fill.
	 * @param vgap
	 * 		Vertical spacing between items.
	 */
	public ColumnPane(Insets insets, double leftPercent, double rightPercent, double vgap) {
		setCenter(grid);
		setPadding(insets);
		ColumnConstraints column1 = new ColumnConstraints();
		ColumnConstraints column2 = new ColumnConstraints();
		column1.setPercentWidth(leftPercent);
		column2.setPercentWidth(rightPercent);
		column2.setFillWidth(true);
		column2.setHgrow(Priority.ALWAYS);
		column2.setHalignment(HPos.RIGHT);
		grid.getColumnConstraints().addAll(column1, column2);
		grid.setVgap(vgap);
	}

	/**
	 * Setup grid.
	 */
	public ColumnPane() {
		this(new Insets(5, 10, 5, 10), 70, 30, 5);
	}

	/**
	 * Add row of controls.
	 *
	 * @param left
	 * 		Smaller left control.
	 * @param right
	 * 		Larger right control.
	 */
	public void add(Node left, Node right) {<FILL_FUNCTION_BODY>}
}

		// Dummy SubLabeled for proper sizing. Otherwise, a Region would suffice.
		if (left == null)
			left = new SubLabeled(" ", " ");
		// Add controls
		grid.add(left, 0, row);
		grid.add(right, 1, row);
		row++;
		// Force allow HGrow, using Region instead of Node due to inconsistent behavior using Node
		if (right instanceof Region)
			((Region) right).setMaxWidth(Double.MAX_VALUE);
	
<methods>public void <init>() ,public void <init>(javafx.scene.Node) ,public void <init>(javafx.scene.Node, javafx.scene.Node, javafx.scene.Node, javafx.scene.Node, javafx.scene.Node) ,public final ObjectProperty<javafx.scene.Node> centerProperty() ,public static void clearConstraints(javafx.scene.Node) ,public final javafx.scene.Node getBottom() ,public final javafx.scene.Node getCenter() ,public javafx.geometry.Orientation getContentBias() ,public final javafx.scene.Node getLeft() ,public static javafx.geometry.Insets getMargin(javafx.scene.Node) ,public final javafx.scene.Node getRight() ,public final javafx.scene.Node getTop() ,public final ObjectProperty<javafx.scene.Node> leftProperty() ,public final ObjectProperty<javafx.scene.Node> rightProperty() ,public static void setAlignment(javafx.scene.Node, javafx.geometry.Pos) ,public final void setBottom(javafx.scene.Node) ,public final void setCenter(javafx.scene.Node) ,public final void setLeft(javafx.scene.Node) ,public static void setMargin(javafx.scene.Node, javafx.geometry.Insets) ,public final void setRight(javafx.scene.Node) ,public final void setTop(javafx.scene.Node) ,public final ObjectProperty<javafx.scene.Node> topProperty() <variables>private static final java.lang.String ALIGNMENT,private static final java.lang.String MARGIN,private ObjectProperty<javafx.scene.Node> bottom,private ObjectProperty<javafx.scene.Node> center,private ObjectProperty<javafx.scene.Node> left,private ObjectProperty<javafx.scene.Node> right,private ObjectProperty<javafx.scene.Node> top