|
| 1 | +--- |
| 2 | +name: GemsFX |
| 3 | +status: Production-ready, Very Active |
| 4 | +javaVersion: 21+ |
| 5 | +learningCurve: Easy-Moderate |
| 6 | +lastRelease: v3.10.1 (February 2026) |
| 7 | +learnMoreText: GemsFX on GitHub |
| 8 | +learnMoreHref: https://github.com/dlsc-software-consulting-gmbh/GemsFX |
| 9 | +image: images/ui-gemsfx.png |
| 10 | +tags: |
| 11 | + - Desktop UI |
| 12 | + - UI Components |
| 13 | +dateAdded: 2026-02-27 |
| 14 | +--- |
| 15 | + |
| 16 | +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. |
| 17 | + |
| 18 | +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. |
| 19 | + |
| 20 | +## Code Example |
| 21 | + |
| 22 | +```java |
| 23 | +import com.dlsc.gemsfx.CalendarPicker; |
| 24 | +import com.dlsc.gemsfx.SearchField; |
| 25 | +import javafx.application.Application; |
| 26 | +import javafx.geometry.Insets; |
| 27 | +import javafx.scene.Scene; |
| 28 | +import javafx.scene.control.Label; |
| 29 | +import javafx.scene.layout.VBox; |
| 30 | +import javafx.stage.Stage; |
| 31 | +import javafx.util.StringConverter; |
| 32 | +import java.util.List; |
| 33 | +import java.util.stream.Collectors; |
| 34 | + |
| 35 | +public class GemsFXDemo extends Application { |
| 36 | + |
| 37 | + @Override |
| 38 | + public void start(Stage stage) { |
| 39 | + // SearchField with suggestion model |
| 40 | + SearchField<String> searchField = new SearchField<>(); |
| 41 | + searchField.setSuggestionProvider(request -> |
| 42 | + List.of("Apple", "Banana", "Cherry", "Date", "Elderberry") |
| 43 | + .stream() |
| 44 | + .filter(s -> s.toLowerCase().contains(request.getUserText().toLowerCase())) |
| 45 | + .collect(Collectors.toList()) |
| 46 | + ); |
| 47 | + searchField.setConverter(new StringConverter<>() { |
| 48 | + public String toString(String s) { return s != null ? s : ""; } |
| 49 | + public String fromString(String s) { return s; } |
| 50 | + }); |
| 51 | + |
| 52 | + // CalendarPicker |
| 53 | + CalendarPicker calendarPicker = new CalendarPicker(); |
| 54 | + |
| 55 | + VBox root = new VBox(10, |
| 56 | + new Label("Search:"), searchField, |
| 57 | + new Label("Pick a date:"), calendarPicker |
| 58 | + ); |
| 59 | + root.setPadding(new Insets(20)); |
| 60 | + |
| 61 | + stage.setScene(new Scene(root, 400, 300)); |
| 62 | + stage.setTitle("GemsFX Demo"); |
| 63 | + stage.show(); |
| 64 | + } |
| 65 | + |
| 66 | + public static void main(String[] args) { launch(args); } |
| 67 | +} |
| 68 | +``` |
0 commit comments