← Back

GemsFX

GemsFX

Status: Production-ready, Very Active

Java Version: 21+

Learning Curve: Easy-Moderate

Last Release: v3.10.1 (February 2026)

GemsFX on GitHub
Desktop UI UI Components

GemsFX is a rich collection of custom JavaFX controls and utilities developed by DLSC Software & Consulting GmbH and released under the Apache 2.0 licence. It extends the standard JavaFX component set with polished, production-grade widgets that would otherwise require significant custom development effort. The library covers a wide range of UI needs: date and time controls (CalendarView, CalendarPicker, DateRangePicker, TimePicker, DurationPicker), advanced text input (SearchField, TagsField, EmailField, EnhancedPasswordField, ExpandingTextArea), layout helpers (ResponsivePane, DrawerStackPane, PowerPane), media controls (PhotoView, AvatarView, SVGImageView), and utility components like FilterView, InfoCenterPane, and SessionManager.

GemsFX targets JavaFX 23+ and Java 21+, aligns with the modern JavaFX ecosystem, and integrates the optional AtlantaFX stylesheet for contemporary styling. Available from Maven Central with a single dependency, it is easy to add to existing JavaFX projects. The library is actively maintained with frequent releases and is showcased on JFX Central. It is the go-to choice for JavaFX developers who need feature-rich, well-styled UI components without building them from scratch.

Code Example


            import com.dlsc.gemsfx.CalendarPicker;
            import com.dlsc.gemsfx.SearchField;
            import javafx.application.Application;
            import javafx.geometry.Insets;
            import javafx.scene.Scene;
            import javafx.scene.control.Label;
            import javafx.scene.layout.VBox;
            import javafx.stage.Stage;
            import javafx.util.StringConverter;
            import java.util.List;
            import java.util.stream.Collectors;
            
            public class GemsFXDemo extends Application {
            
                @Override
                public void start(Stage stage) {
                    // SearchField with suggestion model
                    SearchField<String> searchField = new SearchField<>();
                    searchField.setSuggestionProvider(request ->
                        List.of("Apple", "Banana", "Cherry", "Date", "Elderberry")
                            .stream()
                            .filter(s -> s.toLowerCase().contains(request.getUserText().toLowerCase()))
                            .collect(Collectors.toList())
                    );
                    searchField.setConverter(new StringConverter<>() {
                        public String toString(String s) { return s != null ? s : ""; }
                        public String fromString(String s) { return s; }
                    });
            
                    // CalendarPicker
                    CalendarPicker calendarPicker = new CalendarPicker();
            
                    VBox root = new VBox(10,
                        new Label("Search:"), searchField,
                        new Label("Pick a date:"), calendarPicker
                    );
                    root.setPadding(new Insets(20));
            
                    stage.setScene(new Scene(root, 400, 300));
                    stage.setTitle("GemsFX Demo");
                    stage.show();
                }
            
                public static void main(String[] args) { launch(args); }
            }