Basics

Guides

API Reference

Menu

Basics

Guides

API Reference

ControlsFX Usage Guide

ControlsFX adds a broad set of higher-level JavaFX UI controls to Aussom under fx.controlsfx.*. It fills in many gaps left by the standard JavaFX control set, especially around selection controls, popovers, notifications, advanced layout containers, and data-oriented widgets.

In Aussom the ControlsFX surface is split across several modules so the wrapper files stay manageable:

  • fx.controlsfx.controlsfx
  • fx.controlsfx.FontAwesome
  • fx.controlsfx.BasicControls
  • fx.controlsfx.SelectionControls
  • fx.controlsfx.LayoutControls
  • fx.controlsfx.AdvancedControls

What It Is Good For

  • richer forms and settings screens
  • popup help and toast notifications
  • multi-select and searchable selection widgets
  • split-pane, master-detail, and hidden-side layouts
  • advanced controls such as PropertySheet and GridView

Key Concepts

Area Common Classes
Notifications and popups CfxNotifications, NotificationPane, PopOver
Basic controls ToggleSwitch, RangeSlider
Selection controls CheckComboBox, CheckListView, CheckTreeView, SearchableComboBox, SegmentedButton, BreadCrumbBar
Layout and status StatusBar, MaskerPane, MasterDetailPane, HiddenSidesPane, InfoOverlay
Advanced controls Rating, TaskProgressView, PropertySheet, GridView

Getting Started

Include the modules for the controls you plan to use:

include fx;
include fx.Label;
include fx.VBox;
include fx.ToggleButton;
include fx.controlsfx.controlsfx;
include fx.controlsfx.BasicControls;
include fx.controlsfx.SelectionControls;
include fx.controlsfx.LayoutControls;
include fx.controlsfx.AdvancedControls;

Example 1: Notification Pane and Toast Notification

include fx;
include fx.Label;
include fx.VBox;
include fx.controlsfx.controlsfx;
include fx.controlsfx.BasicControls;

app = fx.fxApp("ControlsFX Notifications", 540, 280);

body = new Label("Main content");
pane = new NotificationPane(body);
pane.setText("Inline notification");

root = new VBox();
root.add(pane);

app.setLayout(root);
app.show(true);

pane.showText("Saved locally");

controlsfx.newNotifications()
    .owner(app)
    .title("Saved")
    .text("ControlsFX notification")
    .position("BOTTOM_RIGHT")
    .hideAfterMillis(1500)
    .showInformation();

fx.shutdown();

Example 2: Searchable Combo, Toggle Switch, and Range Slider

include fx;
include fx.VBox;
include fx.controlsfx.BasicControls;
include fx.controlsfx.SelectionControls;

app = fx.fxApp("ControlsFX Form", 480, 360);

toggle = new ToggleSwitch("Enabled");
toggle.setSelected(true);

range = new RangeSlider(0.0, 100.0, 20.0, 80.0);

combo = new SearchableComboBox(["Alpha", "Beta", "Gamma"]);
combo.select("Beta");

root = new VBox();
root.add([toggle, range, combo]);

app.setLayout(root);
app.show(true);
fx.shutdown();

Example 3: Property Sheet and Grid View

PropertySheet is intentionally thin in v1. It is most useful once you have AJI-backed PropertySheet.Item objects to feed into it.

include fx;
include fx.VBox;
include fx.controlsfx.AdvancedControls;

app = fx.fxApp("ControlsFX Advanced", 700, 520);

sheet = new PropertySheet();
sheet.setSearchBoxVisible(true);
sheet.setModeSwitcherVisible(true);
sheet.setMode("CATEGORY");
sheet.setTitleFilter("cpu");

grid = new GridView(["A", "B", "C"]);
grid.setCellWidth(90.0);
grid.setCellHeight(50.0);
grid.setVerticalCellSpacing(8.0);

root = new VBox();
root.add([sheet, grid]);

app.setLayout(root);
app.show(true);
fx.shutdown();

Example 4: PopOver Anchored to a Node

include fx;
include fx.Label;
include fx.VBox;
include fx.controlsfx.BasicControls;

app = fx.fxApp("ControlsFX PopOver", 420, 240);

anchor = new Label("Hover target");
popover = new PopOver(new Label("Popover content"));
popover.setTitle("Popover");
popover.setHeaderAlwaysVisible(true);
popover.setCloseButtonEnabled(true);
popover.setDetachable(false);

root = new VBox();
root.add(anchor);

app.setLayout(root);
app.show(true);

popover.showForNode(anchor);

fx.shutdown();

Tips and Gotchas

  • ControlsFX is broad, so only include the wrapper modules you actually need.
  • Popup-style controls such as PopOver and CfxNotifications behave differently from normal scene-graph nodes. They are shown relative to another node or owner window.
  • PropertySheet is intentionally conservative in the current wrapper. Feed it raw AJI or custom PropertySheet.Item objects when you need real editable property rows.
  • For headless tests, keep large render layouts separate from mutation-heavy runtime tests. Some large ControlsFX scenes can trigger non-fatal renderer issues in headless JavaFX.
  • ControlsFX wrappers are thin by design. If a method is missing, use .obj and AJI rather than blocking on a wrapper addition.
  • The ControlsFX glyph wrapper now lives at fx.controlsfx.FontAwesome.