{"id":13777362,"url":"https://github.com/dlsc-software-consulting-gmbh/GemsFX","last_synced_at":"2025-05-11T11:33:37.670Z","repository":{"id":42526045,"uuid":"207596279","full_name":"dlsc-software-consulting-gmbh/GemsFX","owner":"dlsc-software-consulting-gmbh","description":"A collection of JavaFX controls and utilities.","archived":false,"fork":false,"pushed_at":"2025-04-28T09:56:50.000Z","size":35131,"stargazers_count":539,"open_issues_count":2,"forks_count":60,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-04-28T09:58:37.171Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dlsc-software-consulting-gmbh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-09-10T15:30:17.000Z","updated_at":"2025-04-28T09:56:55.000Z","dependencies_parsed_at":"2023-02-17T22:15:45.513Z","dependency_job_id":"2ab5592b-6311-40a5-91da-59503cb2347b","html_url":"https://github.com/dlsc-software-consulting-gmbh/GemsFX","commit_stats":null,"previous_names":[],"tags_count":201,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dlsc-software-consulting-gmbh%2FGemsFX","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dlsc-software-consulting-gmbh%2FGemsFX/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dlsc-software-consulting-gmbh%2FGemsFX/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dlsc-software-consulting-gmbh%2FGemsFX/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dlsc-software-consulting-gmbh","download_url":"https://codeload.github.com/dlsc-software-consulting-gmbh/GemsFX/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253558822,"owners_count":21927483,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-03T18:00:42.143Z","updated_at":"2025-05-11T11:33:32.643Z","avatar_url":"https://github.com/dlsc-software-consulting-gmbh.png","language":"Java","funding_links":[],"categories":["Java","Community","Libraries, Tools and Projects","GUI开发/程序"],"sub_categories":["Libraries","文件同步"],"readme":"[![JFXCentral](https://img.shields.io/badge/Find_me_on-JFXCentral-blue?logo=googlechrome\u0026logoColor=white)](https://www.jfx-central.com/libraries/gemsfx)\n[![Maven Central](https://img.shields.io/maven-central/v/com.dlsc.gemsfx/gemsfx?color=brightgreen)](https://search.maven.org/search?q=g:com.dlsc.gemsfx%20AND%20a:gemsfx)\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![Java Version](https://img.shields.io/badge/Java_Version-17-ff69b4)](https://github.com/openjdk/jdk)\n[![JavaFX Version](https://img.shields.io/badge/JavaFX_Version-22-brightgreen)](https://github.com/openjdk/jfx)\n\n# GemsFX\n\nGemsFX is a collection of custom controls and utilities for JavaFX.\n\n## Installation\nAdding GemsFX to your project.\n\n#### Using Maven\nAdd the following dependency to your pom.xml:\n\u003cspan id=\"maven-dependency\"\u003e\u003c/span\u003e\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.dlsc.gemsfx\u003c/groupId\u003e\n    \u003cartifactId\u003egemsfx\u003c/artifactId\u003e\n    \u003cversion\u003e2.16.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n#### Using Gradle\nAdd the following dependency to your build.gradle:\n\u003cspan id=\"gradle-dependency\"\u003e\u003c/span\u003e\n```groovy\nimplementation 'com.dlsc.gemsfx:gemsfx:2.16.0'\n```\n\n## Quick Links\n\n- #### Date \u0026 Time Controls\n  [CalendarView](#calendar-view), [CalendarPicker](#calendar-picker), [DateRangeView](#date-range-view), [DateRangePicker](#date-range-picker),[YearView](#year-view), [YearPicker](#year-picker), [YearMonthView](#year-month-view), [YearMonthPicker](#year-month-picker), [TimePicker](#time-picker), [DurationPicker](#duration-picker)\n- #### Text Input Controls\n  [SearchTextField](#search-text-field), [SearchField](#search-field), [EnhancedPasswordField](#enhanced-password-field), [EmailField](#email-field), [TagsField](#tags-field), [ExpandingTextArea](#expanding-text-area), [ResizableTextArea](#resizable-text-area), [LimitedTextArea](#limited-text-area)\n- #### Advanced Panes\n  [DialogPane](#dialog-pane), [DrawerStackPane](#drawer-stack-pane), [PowerPane](#power-pane), [ResponsivePane](#responsive-pane)\n- #### Image controls\n  [PhotoView](#photo-view), [AvatarView](#avatar-view), [PaymentOptionControls](#payment-option-controls), [SVGImageView](#svg-image-view)\n- #### Other Controls\n  [CircleProgressIndicator](#circle-progress-indicator), [FilterView](#filter-view), [InfoCenterPane](#info-center-pane), [StripView](#strip-view), [Spacer](#spacer), [ScreensView](#screens-view), [SessionManager](#session-manager), [StageManager](#stage-manager), [TreeNodeView](#tree-node-view), [MultiColumnListView](#multi-column-list-view)\n\n## CalendarView\n\n\u003cspan id=\"calendar-view\" \u003e\u003c/span\u003e\n\nA nice UI for displaying the month of a year. The view is highly configurable and allows specifying\nlatest and earliest date for selection purposes. The days of the previous or the next month can either\nbe shown or hidden. When clicking on the month the user will be presented with a custom view for quickly\nselecting a different month. The same happens when clicking on the year. The calendar view uses a\nselection model which can work in three ways: single date selection, multiple date selection, or date range\nselection. Last but not least, the layout of the header can be changed, so that the month and year labels\nare either left, center, or right aligned.\n\n![CalendarView](gemsfx/docs/calendar-view.png)\n\n## CalendarPicker\n\n\u003cspan id=\"calendar-picker\" \u003e\u003c/span\u003e\n\nA date picker control that uses the calendar view of GemsFX. The field is editable to the\nuser can also enter the date via keyboard.\n\n![CalendarPicker](gemsfx/docs/calendar-picker.png)\n\n## DateRangeView\n\n\u003cspan id=\"date-range-view\" \u003e\u003c/span\u003e\n\nA view that allows the user to specify a date range. The view supports defining a couple of presets\nfor quick range selection, e.g. \"last week\". The left and right month views are bound so that the\nright calendar will never allow the user to specify a date that is earlier than those dates shown in\nthe left month view.\n\n![DateRangeView](gemsfx/docs/date-range-view.png)\n\n## DateRangePicker\n\n\u003cspan id=\"date-range-picker\" \u003e\u003c/span\u003e\n\nA picker that allows the user to specify a date range via the date range view. The picker supports\ntwo different layouts (small, big). The picker shows the selected range and also a name for the range,\nwhich is either derived from the name of a selected preset or simply says something like \"custom range\".\n\n![DateRangePicker](gemsfx/docs/date-range-picker-small.png)\n![DateRangePicker](gemsfx/docs/date-range-picker-big.png)\n![DateRangePicker](gemsfx/docs/date-range-picker-expanded.png)\n\n## YearView\n\n\u003cspan id=\"year-view\" \u003e\u003c/span\u003e\n\nA view for displaying a configurable number of columns and rows with years. The user can use the grid\nto quickly select a new year. Properties are available to restrict the earliest and the latest year that\nis selectable.\n\n![YearView](gemsfx/docs/year-view.png)\n\n## YearPicker\n\n\u003cspan id=\"year-picker\"\u003e\u003c/span\u003e\n\nA view for picking a year from a dropdown showing the year view control.\n\n![YearMonthPicker](gemsfx/docs/year-picker.png)\n\n## YearMonthView\n\n\u003cspan id=\"year-month-view\"\u003e\u003c/span\u003e\n\nA view for displaying the months of a given year. The user can quickly switch between years. Properties\nare available to restrict the selection to an earliest and a latest month.\n\n![YearMonthPicker](gemsfx/docs/year-month-view.png)\n\n## YearMonthPicker\n\n\u003cspan id=\"year-month-picker\"\u003e\u003c/span\u003e\n\nA control for specifying the month of a year (see time API class \"YearMonth\"). It is very similar to the standard date\npicker class\nand actually inherits a lot of styling attributes from it.\n\n![YearMonthPicker](gemsfx/docs/year-month-picker.png)\n\n## TimePicker\n\n\u003cspan id=\"time-picker\"\u003e\u003c/span\u003e\n\nA small control used for entering a time. The control can be configured with a \"step rate\" for the minutes field (e.g. \"\n15 minutes\") that will be used when\nincrementing or decrementing the minutes field via the keyboard (arrow keys). The control can also be configured to only\nallow a time within the time range\ndefined by an earliest and a latest time. A popup can be used to work with the mouse only. It is also possible to\nspecify whether the fields should \"roll over\"\nor not when they reach their minimum or maximum value. For example: the minute field shows 59 minutes and the user wants\nto increase it via the arrow key. Then\nthe new value will be \"0\" when rollover is enabled. If not the value will remain at 59. Rollover combined with \"linking\nfields\" will cause the hours field to\nget increased when the minute field rolls over from 59 to 0 or decreased when the minute field rolls over from 0 to 59.\n\n![TimePicker](gemsfx/docs/time-picker.png)\n\n## DurationPicker\n\n\u003cspan id=\"duration-picker\"\u003e\u003c/span\u003e\n\nA small control used for entering a duration. The control can be configured to only allow a duration within the range\ndefined by a minimum and maximum duration. A popup can be used to work with the mouse only. It is also possible to\nspecify whether the fields should \"roll over\"\nor not when they reach their minimum or maximum value. The control supports similar features as the time picker:\nrollover fields, keyboard support, linking fields,\nfilling fields with leading zeros, etc..\n\n![DurationPicker](gemsfx/docs/duration-picker.png)\n\n## SearchTextField\n\n\u003cspan id=\"search-text-field\"\u003e\u003c/span\u003e\n\nA textfield that has been nicely decorated to express that it is used for performing searches.\n\n![SearchTextField](gemsfx/docs/search-text-field.png)\n\n## Search Field\n\n\u003cspan id=\"search-field\"\u003e\u003c/span\u003e\n\nAn auto-suggest text field with a behaviour similar to the spotlight search experience on Mac. While typing the field\nwill automatically finish the entered text if it has a search result where the name starts with the exact typed text. At\nany time the typed text and the auto-completed text will be visually distinguishable. The field is also capable of\ncreating a new object for the entered text if no result can be found. For detailed\ninstructions [read the WIKI page](https://github.com/dlsc-software-consulting-gmbh/GemsFX/wiki/SearchField).\n\n![SearchField](gemsfx/docs/search-field.png)\n\n## EnhancedPasswordField\n\n\u003cspan id=\"enhanced-password-field\"\u003e\u003c/span\u003e\n\nThe EnhancedPasswordField is a custom password field. It allows the addition of custom nodes like icons or buttons to the sides of the field,\nsupports toggling password visibility between masked and plain text, and enables customization of the echo character used for masking.\n\n![EnhancedPasswordField](gemsfx/docs/enhanced-password-field.png)\n\n## Email Field\n\n\u003cspan id=\"email-field\"\u003e\u003c/span\u003e\n\nA text field that has been nicely decorated to express that it is used for entering email addresses. The field will\nvalidate the entered text and show an error message if the text is not a valid email address.\n\n![EmailField](gemsfx/docs/email-field.png)\n\n## Tags Field\n\n\u003cspan id=\"tags-field\"\u003e\u003c/span\u003e\n\nAn extension of the SearchField control that supports the creation of tags. Selected values are converted into tags when\nthe user hits enter, the right arrow key, or tab. The API of this control allows applications to retrieve the tags, or\nto monitor the selection state of the tags. The control uses a FlowPane for its layout, which allows the tags to span\nmultiple rows.\n\n![TagsField](gemsfx/docs/tags-field.png)\n\n## Expanding Text Area\n\nA customized text area that grows based on its text content. The text area will never show vertical or horizontal\nscrollbars.\n\n![ExpandingTextArea](gemsfx/docs/expanding-text-area.png)\n\n## Resizable Text Area\n\n\u003cspan id=\"resizable-text-area\"\u003e\u003c/span\u003e\n\nA custom control that wraps a text area and adds a resize handle to the lower right corner of it. The area can be\nconfigured to be resizable in vertical, horizontal, or both directions.\n\n![ResizableTextArea](gemsfx/docs/resizable-text-area.png)\n\n## Limited Text Area\n\n\u003cspan id=\"limited-text-area\"\u003e\u003c/span\u003e\n\nLimitedTextArea is derived from ResizableTextArea and offers a character-limiting feature,\naccompanied by a character counter that indicates the remaining number of characters.\n\n![LimitedTextArea](gemsfx/docs/limited-text-area.png)\n\n## Dialog Pane\n\n\u003cspan id=\"dialog-pane\"\u003e\u003c/span\u003e\n\nThe class DialogPane can be used as a layer on top of any application. It offers various methods to display different\ntypes of dialogs.\n\n* Information\n* Warning\n* Error\n* Confirmation\n* Node (any UI)\n* Busy (spinning animation, indeterminate)\n* Single line text input\n* Multiple line text input\n\n![DialogPane](gemsfx/docs/dialog-pane.png)\n\n## DrawerStackPane\n\n\u003cspan id=\"drawer-stack-pane\"\u003e\u003c/span\u003e\n\nA stackpane with an optional node that can be shown inside a drawer. The drawer is animated and can slide in and out.\nWhen the drawer is showing a semi-transparent glass pane will cover the background. In addition the last height of the\ndrawer can be persisted via the preferences API so that next time the drawer will show itself like in the last user\nsession.\n\n![DrawerStackPane](gemsfx/docs/drawer-stackpane.png)\n\n## PowerPane\n\n\u003cspan id=\"power-pane\"\u003e\u003c/span\u003e\n\nThe PowerPane is a versatile container that combines specialized panes such as the InfoCenterPane, DialogPane,\nDrawerStackPane, and HiddenSidesPane. It serves as an ideal foundation for crafting feature-rich client applications.\n\n![PowerPane](gemsfx/docs/power-pane.png)\n\n## ResponsivePane\n\n\u003cspan id=\"responsive-pane\"\u003e\u003c/span\u003e\n\nResponsivePane is a container that allows for responsive behavior of a sidebar and a main content panel.\nDepending on the specified position of the sidebar (LEFT or RIGHT), it will automatically adjust its visibility\nbased on the width of the pane. When the window width is narrow, the sidebar is hidden, and only the content panel is\nshown.\nWhen the window width is moderate, both a small sidebar and a large sidebar, along with the content panel, are\ndisplayed.\nWhen the window width is wide, both the large sidebar and the main content pane are shown.\nSimilarly, if the sidebar is positioned at the TOP or BOTTOM, its visibility will be adjusted based on the height of the\npane.\nHowever, it is also possible to force the sidebar to be displayed regardless of the window size.\n\n![ResponsivePane](gemsfx/docs/responsive-pane.png)\n\n## Photo View\n\n\u003cspan id=\"photo-view\"\u003e\u003c/span\u003e\n\nA control for adding and editing a user profile photo (or whatever). The user can click on the control to choose an\nimage file\nvia a file chooser (replacable) or via drag and drop. Once added the user can move the image around and zoom in / out.\nAs a convenience\nthe view always provide a cropped version of the original image. This allows applications to store a smaller file on the\nserver / in\nthe database. The control supports some keyboard shortcuts. The file chooser can be activated by pressing SPACE or\nENTER. The photo can\nbe removed by pressing DELETE or BACK_SPACE.\n\n![PhotoView](gemsfx/docs/photo-view.png)\n\n## Avatar View\n\u003cspan id=\"avatar-view\"\u003e\u003c/span\u003e\n\nAvatarView is a control for displaying user avatars. This component can show either a user's profile image or the initials of their name (if no image is provided or the image has not finished loading). It allows setting the avatar shape to be either circular or rectangular, with customizable corner rounding for rectangular avatars and adjustable avatar size.\n\nCompared to `PhotoView`, `AvatarView` offers a simpler functionality primarily for displaying avatars. If you need more advanced features such as adding and editing profile photos via a file chooser or drag-and-drop, and the ability to move and zoom the image, PhotoView is a better choice.\nIf your requirement is simply to display a user's avatar, then AvatarView is a more lightweight option.\n\n![AvatarView](gemsfx/docs/avatar-view.png)\n\n## Payment Option Controls\n\n\u003cspan id=\"payment-option-controls\"\u003e\u003c/span\u003e\n\nA specialized subclass of ImageView that can be used to display different graphics for different payment options.\nGraphics provided by Gregoire Segretain (https://www.sketchappsources.com/contributor/gregoiresgt)\n\n![LightOption](gemsfx/docs/payment-options-light.png) ![DarkOption](gemsfx/docs/payment-options-dark.png)\n\n## SVGImageView\n\n\u003cspan id=\"svg-image-view\"\u003e\u003c/span\u003e\n\nA control used for rendering SVG image files. Utilizing the [jsvg](https://github.com/weisJ/jsvg) library, ensuring\nhigh-definition quality even when scaled.\n\n- Packaging Note: Not suitable for native packaging yet due to AWT dependency.\n- Content Note: Static only for now; future jsvg updates may add animation.\n- Development Note: [jsvg](https://github.com/weisJ/jsvg) is evolving and does not yet support all features of the SVG\n  specification.\n\n![SVGImageView](gemsfx/docs/svg-image-view.png)\n\n## Circle Progress Indicator\n\n\u003cspan id=\"circle-progress-indicator\"\u003e\u003c/span\u003e\n\nA control for displaying a circular progress indicator. The control can be configured to show a percentage value or a\ntext value. The control can also be configured to show a progress bar.\n\n![CircleProgressIndicator](gemsfx/docs/circle-progress-indicator.png)\n\n## FilterView\n\n\u003cspan id=\"filter-view\"\u003e\u003c/span\u003e\n\nA control for filtering the content of an observable list. Works in combination with TableView, ListView, or any control\nthat is based on observable lists.\n\n![FilterView](gemsfx/docs/filter-view.png)\n\n## InfoCenterPane\n\n\u003cspan id=\"info-center-pane\"\u003e\u003c/span\u003e\n\nA view for displaying (groups of) notifications. Incoming / new notifications slide-in via an animation. Each group can\nhave its own factory for the creation of notification views. A group with multiple notifications can be shown stacked or\nexpanded. A threshold can be defined to determine the maximum number of notifications that can be shown. If the\nnotifcation count is higher than the threshold then the user can switch to a list view showing them all. Groups can be\npinned so that they always stay in the top position without being scrolled out of view.\n\n![InfoCenterPane](gemsfx/docs/info-center-pane.png)\n\n## StripView\n\n\u003cspan id=\"strip-view\"\u003e\u003c/span\u003e\n\nA view for horizontally positioning a number of nodes, one for each item added to the view's model. Scroll buttons will\nbecome visible on either side of the view if the available width is not sufficient to show all items / nodes. Scrolling\nis animated (can be turned off). The nodes on either side are fading out so that the scroll controls are completely\nvisible. The view also supports the single selection of an item.\n\n![StripView](gemsfx/docs/strip-view.png)\n\n## Spacer\n\n\u003cspan id=\"spacer\"\u003e\u003c/span\u003e\n\nSpacer extends Region and is designed to create flexible spaces in container layouts, especially in HBox and VBox.\nWithin an HBox, the Spacer grows horizontally. Within a VBox, it grows vertically. When the activeProperty is set to\nfalse, the Spacer will not grow.\n\n![Spacer](gemsfx/docs/spacer.png)\n\n## ScreensView\n\n\u003cspan id=\"screens-view\"\u003e\u003c/span\u003e\n\nA small control that can be used to display the screen geometries as seen by the application. The view can also\ndisplay the application's windows, and some arbitrary shapes (might be useful for debugging purposes).\n\n![ScreensView](gemsfx/docs/screens-view.png)\n\n## Session Manager\n\n\u003cspan id=\"session-manager\"\u003e\u003c/span\u003e\n\nThe `SessionManager` class is a utility class that can be used to monitor observables and persist them across user\nsessions. This can be useful, for example, for storing and restoring the position of the divider of a SplitPane.\n\n## Stage Manager\n\n\u003cspan id=\"stage-manager\"\u003e\u003c/span\u003e\n\nThe `StageManager` class is a utility class that keeps track of a stage's location and dimensions. These values\nwill be stored and used across user sessions via the `java.util.prefs` API.\n\n## Tree Node View\n\n\u003cspan id=\"tree-node-view\"\u003e\u003c/span\u003e\n\nA view for displaying a tree of nodes.\n\n![TreeNodeView](gemsfx/docs/tree-node-view.png)\n\n## Multi Column List View\n\n\u003cspan id=\"multi-column-list-view\"\u003e\u003c/span\u003e\n\nA view for displaying multiple columns where each column consists of a header control and a ListView.\nThe control allows the user to rearrange the items in each ListView and also to drag and drop items from one column to\nanother.\n\n![MultiColumnListView](gemsfx/docs/multi-column-list-view.png)\n\n## Running the demos\n\nYou can run the demos using Maven by typing any of the following lines into your\nterminal:\n\n    mvn javafx:run -f gemsfx-demo/pom.xml -Dmain.class=com.dlsc.gemsfx.demo.DialogPaneApp\n    mvn javafx:run -f gemsfx-demo/pom.xml -Dmain.class=com.dlsc.gemsfx.demo.DrawerStackPaneApp\n    mvn javafx:run -f gemsfx-demo/pom.xml -Dmain.class=com.dlsc.gemsfx.demo.DurationPickerApp\n    mvn javafx:run -f gemsfx-demo/pom.xml -Dmain.class=com.dlsc.gemsfx.demo.EmailFieldApp\n    mvn javafx:run -f gemsfx-demo/pom.xml -Dmain.class=com.dlsc.gemsfx.demo.EnhancedLabelApp\n    mvn javafx:run -f gemsfx-demo/pom.xml -Dmain.class=com.dlsc.gemsfx.demo.ExpandingTextAreaApp\n    mvn javafx:run -f gemsfx-demo/pom.xml -Dmain.class=com.dlsc.gemsfx.demo.FilterViewApp\n    mvn javafx:run -f gemsfx-demo/pom.xml -Dmain.class=com.dlsc.gemsfx.demo.InfoCenterApp\n    mvn javafx:run -f gemsfx-demo/pom.xml -Dmain.class=com.dlsc.gemsfx.demo.PaymentOptionApp\n    mvn javafx:run -f gemsfx-demo/pom.xml -Dmain.class=com.dlsc.gemsfx.demo.PaymentOptionTilesApp\n    mvn javafx:run -f gemsfx-demo/pom.xml -Dmain.class=com.dlsc.gemsfx.demo.PhotoViewApp\n    mvn javafx:run -f gemsfx-demo/pom.xml -Dmain.class=com.dlsc.gemsfx.demo.ResizableTextAreaApp\n    mvn javafx:run -f gemsfx-demo/pom.xml -Dmain.class=com.dlsc.gemsfx.demo.SearchFieldApp\n    mvn javafx:run -f gemsfx-demo/pom.xml -Dmain.class=com.dlsc.gemsfx.demo.SearchTextFieldApp\n    mvn javafx:run -f gemsfx-demo/pom.xml -Dmain.class=com.dlsc.gemsfx.demo.TagsFieldApp\n    mvn javafx:run -f gemsfx-demo/pom.xml -Dmain.class=com.dlsc.gemsfx.demo.TimePickerApp\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdlsc-software-consulting-gmbh%2FGemsFX","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdlsc-software-consulting-gmbh%2FGemsFX","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdlsc-software-consulting-gmbh%2FGemsFX/lists"}