dlsc-software-consulting-gmbh / Formsfx

Licence: apache-2.0
A framework for easily creating forms for a JavaFX UI.

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Formsfx

Rsfloatinputview
A Float Input View with smooth animation and supporting icon and seperator written with Swift
Stars: ✭ 103 (-72.89%)
Mutual labels:  ui-components, forms
Truly Ui
Truly-UI - Web Angular UI Components for Desktop Applications (Electron, NW, APP JS)
Stars: ✭ 195 (-48.68%)
Mutual labels:  desktop, ui-components
Rsformview
A Cocoapods library designed to easily create forms with multiple data entry fields
Stars: ✭ 84 (-77.89%)
Mutual labels:  ui-components, forms
React Multistep
React multistep form component
Stars: ✭ 473 (+24.47%)
Mutual labels:  ui-components, forms
Substrate
Create native Java(FX) apps for desktop, mobile and embedded
Stars: ✭ 210 (-44.74%)
Mutual labels:  javafx, desktop
Jfoenix
JavaFX Material Design Library
Stars: ✭ 5,720 (+1405.26%)
Mutual labels:  javafx, desktop
Jafar
🌟!(Just another form application renderer)
Stars: ✭ 107 (-71.84%)
Mutual labels:  ui-components, forms
actlist-plugin
🔧 Actlist Plugin library to development and debugging.
Stars: ✭ 14 (-96.32%)
Mutual labels:  javafx, desktop
Fxdesktopsearch
A JavaFX based desktop search application.
Stars: ✭ 147 (-61.32%)
Mutual labels:  javafx, desktop
Drombler Fx
Drombler FX - the modular application framework for JavaFX.
Stars: ✭ 52 (-86.32%)
Mutual labels:  javafx, desktop
find the letter material design
litterature game made using javaFX and FXML, small collaboration, the game is about finding the missing letters from a word using different hints (an image, incomplete word..etc).
Stars: ✭ 21 (-94.47%)
Mutual labels:  javafx, desktop
Tornadofx
Lightweight JavaFX Framework for Kotlin
Stars: ✭ 3,499 (+820.79%)
Mutual labels:  javafx, desktop
Wxwidgets
wxWidgets is a free and open source cross-platform C++ framework for writing advanced GUI applications using native controls.
Stars: ✭ 3,994 (+951.05%)
Mutual labels:  desktop
Flutter everywhere
Template Flutter Project for iOS, Android, Fuschica, MacOS, Windows, Linux, Web, Command Line, Chrome Extension
Stars: ✭ 372 (-2.11%)
Mutual labels:  desktop
Flutter Settings Ui
Create native settings for Flutter app in a minutes.
Stars: ✭ 363 (-4.47%)
Mutual labels:  ui-components
Fxglgames
This repo contains sample games built with FXGL
Stars: ✭ 363 (-4.47%)
Mutual labels:  javafx
Fn Fx
A Functional API around JavaFX / OpenJFX.
Stars: ✭ 373 (-1.84%)
Mutual labels:  javafx
Kahla.app
Kahla is a cross-platform business messaging app.
Stars: ✭ 370 (-2.63%)
Mutual labels:  desktop
Instagramlive Php
A PHP script that allows for you to go live on Instagram with any streaming program that supports RTMP!
Stars: ✭ 362 (-4.74%)
Mutual labels:  desktop
Django Fobi
Form generator/builder application for Django done right: customisable, modular, user- and developer- friendly.
Stars: ✭ 360 (-5.26%)
Mutual labels:  forms

Bugs Code Smells Lines of Code Maintainability Rating Quality Gate Status Reliability Rating Security Rating Technical Debt Vulnerabilities

FormsFX

Forms for business application made easy. Creating forms in Java has never been this easy!

Download Build Status

Maven

To use this framework as part of your Maven build simply add the following dependency to your pom.xml file.

<dependency>
  <groupId>com.dlsc.formsfx</groupId>
  <artifactId>formsfx-core</artifactId>
  <version>11.3.2</version>
</dependency>

What is FormsFX?

Creating forms in JavaFX is a tedious and very error-prone task. FormsFX is a framework which solves this problem. It enables the developer to create forms with ease and creates well-designed and user-friendly forms by default. FormsFX offers a fluent API that is very easy to understand and reduces the amount of coding needed. It creates all the necessary bindings for the properties and it just works.

Main Features

  • Simple and understandable Fluent API
  • Different semantic items
  • Pre-defined controls
  • Validation
  • Localisation
Form loginForm = Form.of(
        Group.of(
                Field.ofStringType(model.usernameProperty())
                        .label("Username"),
                Field.ofStringType(model.passwordProperty())
                        .label("Password")
                        .required("This field can’t be empty")
        )
).title("Login");

Semantics

FormsFX offers different semantic layers. The largest entity is the form. It contains groups and sections, which in turn act as containers for fields. Fields are the end user's primary point of interaction as they handle data input and presentation.

Defining a form

Creating a form is as simple as calling Form.of().

Form.of(
        Group.of(
                Field.ofStringType("")
                        .label("Username"),
                Field.ofStringType("")
                        .label("Password")
                        .required("This field can’t be empty")
        ),
        Group.of(…)
).title("Login");

Fields have a range of options that define their semantics and change their functionality.

Option Description
label(String) Describes the field’s content in a concise manner. This description is always visible and usually placed next to the editable control.
tooltip(String) This contextual hint further describes the field. It is usually displayed on hover or focus.
placeholder(String) This hint describes the expected input as long as the field is empty.
required(boolean)
required(String)
Determines, whether entry in this field is required for the correctness of the form.
editable(boolean) Determines, whether end users can edit the contents of this field.
id(String) Describes the field with a unique ID. This is not visible directly, but can be used for styling purposes.
styleClass(List&lt;String&gt;) Adds styling hooks to the field. This can be used on the view layer.
span(int)
span(ColSpan)
Determines, how many columns the field should span on the view layer. Can be a number between 1 and 12 or a ColSpan fraction.
render(SimpleControl) Determines the control that is used to render this field on the view layer.

The following table shows how to create different fields and how they look by default:

String Control

String Control
Field.ofStringType("CHF")
     .label("Currency")
Integer Control
Field.ofIntegerType(8401120)
     .label("Population")
Double Control
Field.ofDoubleType(41285.0)
       .label("Area")
Boolean Control
Field.ofBooleanType(false)
     .label("Independent")
ComboBox Control
Field.ofSingleSelectionType(Arrays.asList("Zürich (ZH)", "Bern (BE)", ), 1)
     .label("Capital")
RadioButton Control
Field.ofSingleSelectionType(Arrays.asList("Right", "Left"), 0)
     .label("Driving on the")
     .render(new SimpleRadioButtonControl<>())
CheckBox Control
Field.ofMultiSelectionType(Arrays.asList("Africa", "Asia", ), Collections.singletonList(2))
     .label("Continent")
     .render(new SimpleCheckBoxControl<>())
ListView Control
Field.ofMultiSelectionType(Arrays.asList("Zürich (ZH)", "Bern (BE)", ), Arrays.asList(0, 1, ))
     .label("Biggest Cities")

Rendering a form

The only point of interaction is the FormRenderer. It delegates rendering of further components to other renderers.

Pane root = new Pane();
root.getChildren().add(new FormRenderer(form));

All fields have a default control that is used for rendering. This can be changed to another compatible implementation using the render() method.

Field.ofMultiSelectionType()
        .render(new SimpleCheckBoxControl<>())

Model

Forms are used to create and manipulate data. In order to use this data in other parts of an application, model classes can be used. These classes contain properties, which are then bound to the persisted value of a field.

StringProperty name = new SimpleStringProperty("Hans");
Field.ofStringType(name);

The persist() and reset() methods can be used to store and revert field values, which in turn updates the binding.

Fields in FormsFX store their values in multiple steps. For free-form fields, like StringField or DoubleField, the exact user input is stored, along with a type-transformed value and a persistent value. The persistence is, by default, handled manually, but this can be overridden by setting the BindingMode to CONTINUOUS on the form level.

Localisation

All displayed values are localisable. Methods like label(), placeholder() accept keys which are then used for translation. By default, FormsFX includes a ResourceBundle-based implementation, however, this can be exchanged for a custom implementation.

private ResourceBundle rbDE = ResourceBundle.getBundle("demo.demo-locale", new Locale("de", "CH"));
private ResourceBundle rbEN = ResourceBundle.getBundle("demo.demo-locale", new Locale("en", "UK"));

private ResourceBundleService rbs = new ResourceBundleService(rbEN);

Form.of()
        .i18n(rbs);

Validation

All fields are validated whenever end users edit the contained data. FormsFX offers a wide range of pre-defined validators, but also includes support for custom validators using the CustomValidator.forPredicate() method.

Validator Description
CustomValidator Define a predicate that returns whether the field is valid or not.
DoubleRangeValidator Define a number range which is considered valid. This range can be limited in either one direction or in both directions.
IntegerRangeValidator Define a number range which is considered valid. This range can be limited in either one direction or in both directions.
RegexValidator Valiate text against a regular expression. This validator offers pre-defined expressions for common use cases, such as email addresses.
SelectionLengthValidator Define a length interval which is considered valid. This range can be limited in either one direction or in both directions.
StringLengthValidator Define a length interval which is considered valid. This range can be limited in either one direction or in both directions.

Advantages

  • Less error-prone
  • Less code needed
  • Easy to learn
  • Easy to understand
  • Easy to extend

Documentation

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].