A framework for easily creating a UI for application settings / preferences.

Overview

PreferencesFX

Preference dialogs for business applications made easy. Creating preference dialogs in Java has never been this easy!

Maven Central Build Status FOSSA Status

screenshot of created preferences dialog

Table of Contents

Maven

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

Java 8

<dependency>
  <groupId>com.dlsc.preferencesfx</groupId>
  <artifactId>preferencesfx-core</artifactId>
  <version>8.6.0</version>
</dependency>

Java 11

<dependency>
  <groupId>com.dlsc.preferencesfx</groupId>
  <artifactId>preferencesfx-core</artifactId>
  <version>11.7.0</version>
</dependency>

Gradle

To use this framework as part of your gradle build simply add the following to your build.gradle file and use the following dependency definition:

Java 8

dependencies {
    compile group: 'com.dlsc.preferencesfx', name: 'preferencesfx-core', version: '8.6.0'
}

Java 11

dependencies {
    compile group: 'com.dlsc.preferencesfx', name: 'preferencesfx-core', version: '11.7.0'
}

What is PreferencesFX?

Creating preference dialogs in JavaFX is a tedious and very error-prone task. PreferencesFX is a framework which solves this problem. It enables the developer to create preference dialogs with ease and creates well-designed and user-friendly preference dialogs by default.

Advantages

  • Less error-prone
  • Less code needed
  • Easy to learn
  • Easy to understand
  • Easy to use, for developers and users alike

Main Features

  • Simple and understandable API
  • The most important features are noted in the picture and the corresponding table below:

screenshot of created preferences dialog with features

Nr. Feature Description
1 Search / Filter Filters all categories for a given String. Enables searching for a Setting, Group or Category by name.
2 TreeView Shows all categories in a hierarchical structure
3 Breadcrumb Bar Shows the user the previous categories in the hierarchy to the currently displayed category and allows the user to navigate back.
4 Undo / Redo Buttons Allows the user a stepwise undo and redo possibility of his last changes.
5 Various pre-defined setting types e.g. Integer, Double, Boolean, String, Lists, Objects
6 close/cancel buttons The close button just closes the window and leaves the preferences as they are. The cancel button discards all changes which are made during the time the dialog was last opened.
  • | Instant persistance | Any changes to the application are saved instantly.

Documentation

This project uses the asciidoctor plugin to generate the necessary documentation. Run the following maven task:

process-resources

Afterwards, you will find the documentation in the target/generated-docs/ subdirectory.

Structure

A preferences dialog can contain multiple Categories.
Each Category contains one to multiple Groups
Each Group contains one to multiple Settings

For better illustration, the basic concept of writing a preferences dialog is shown below:

PreferencesFx preferencesFx = 
    PreferencesFx.of(SaveClass.class,
        Category.of("Category Title",
            Group.of("Group Title",
                Setting.of("Setting Title", new Property())
            )
        )
    );

Notes:

  • It is also possible to omit the Group and declare all settings in a Category directly. However, in this case all settings will simply be displayed one after another without grouping. If you want more control, use Group.
  • A Group can also be defined without a title. In this case, the individual groups are displayed with more space in between them, to ensure they can be differentiated.
  • A Category can also take a graphic node to be used as an icon as the second argument, e.g. Category.of("Category Title", new ImageView(new Image("file:icon.png")),

Demos

We created several demos to visualize the capabilities of PreferencesFX.
Simply launch preferencesfx-demo/src/com/dlsc/preferencesfx/AppStarter.java and look into the different Tabs.

The following demos are available:

Import Description
Standard The standard demo with a few settings and fully working bindings.
Internationalized Shows how to define preference dialogs in multiple languages, using internationalization.
OneCategory Shows the behavior of the API when only one category is used: The Breadcrumb Bar and TreeView will be omitted from the GUI.
Extended A demo, populated with lots of categories, groups and settings without any bindings. Designed to show usage in a big project.

Defining a preferences dialog

Creating a preferences dialog is as simple as calling PreferencesFx.of().

StringProperty stringProperty = new SimpleStringProperty("String");
BooleanProperty booleanProperty = new SimpleBooleanProperty(true);
IntegerProperty integerProperty = new SimpleIntegerProperty(12);
DoubleProperty doubleProperty = new SimpleDoubleProperty(6.5);

PreferencesFx preferencesFx = 
    PreferencesFx.of(AppStarter.class, // Save class (will be used to reference saved values of Settings to)
        Category.of("Category title 1",
            Setting.of("Setting title 1", stringProperty), // creates a group automatically
            Setting.of("Setting title 2", booleanProperty) // which contains both settings
        ),
        Category.of("Category title 2")
            .expand()                                       // Expand the parent category in the tree-view
            .subCategories( // adds a subcategory to "Category title 2"
                Category.of("Category title 3",
                    Group.of("Group title 1",
                        Setting.of("Setting title 3", integerProperty)
                    ),
                    Group.of( // group without title
                        Setting.of("Setting title 3", doubleProperty)
                    )
                )
            )
    );

This code snippet results in the following preferences window, containing three categories:

result

To create a Setting, you only need to define a title and a Property. PreferencesFX does the rest.
You can then integrate this Property in your application. Changes of values in the preferences dialog will be persisted instantly, however it's up to you to decide whether you want to persist them instantly in your application as well.

Required arguments

You have a lot of options to influence the behavior and layout of the preferences dialog.
The following parameters are the absolute minimum, needed for the proper functioning of PreferencesFX:

Parameter Description
AppStarter.class In the constructor of PreferencesFx a saveClass is required. This class is saved as a key for the saved setting values. Further information is available in the javadoc.
Category description Each Category must have a description. This is required to display its description in the TreeView.
Setting description Each Setting must have a description. It will be displayed on the left of the control, which is used to manipulate the respective Setting.

Note: The value of the each Setting is stored using the Java Preferences API by default.
For testing purposes, to clear the saved preferences of the demo, run the method in the class:

preferencesfx-demo/src/test/java/PreferencesStorageReset.java

Optional arguments

The following parameters are optionally available to further configure the dialog created by PreferencesFX:

Method Class Description
.subCategories Category Subcategories allow a Category to have additional subcategories as children. Those are also displayed in the tree.
.expand Category Allows to specify if the Category should be expanded in the Tree-View by default.
.description Group If you decide not to add the description of a group in the constructor, you can still add it after the creation of the group.
.validate Setting Allows to add a Validator to a setting, to set constraints to the values that can be entered.
.persistApplicationState PreferencesFx Defines if the Preferences API should save the application states. This includes the state persistence of the dialog window, as well as the values of each Setting.
.persistWindowState PreferencesFx Defines whether the state of the dialog window (position, size, last selected Category) should be persisted or not. Defaults to false.
.saveSettings PreferencesFx Defines whether the changed settings in the Preferences window should be saved or not. Defaults to true.
.debugHistoryMode PreferencesFx Makes it possible to enable or disable the keycombination to open a debug view of the list of all actions in the history (undo / redo). Pressing Ctrl + Shift + H (Windows) or CMD + Shift + H (Mac) opens a dialog with the undo / redo history, shown in a table. Defaults to false.
.buttonsVisibility PreferencesFx Sets the visibility of the cancel and close buttons in the PreferencesFxDialog. Defaults to true.
.instantPersistent PreferencesFx If set to true, it will instantly apply any changes that are being made in the PreferencesFxDialog. If set to false, it will only apply changes when the Save / Apply / OK button is pressed. Due to a limitation in FormsFX, undo / redo cannot be used with instant persistence switched off! Defaults to true.
.i18n PreferencesFx Sets the translation service of the preferences dialog for internationalization.
.dialogTitle PreferencesFx Allows to specify a custom dialog title.
.dialogIcon PreferencesFx Allows to specify a custom dialog icon.

Setting types

The following table shows how to create Settings using the predefined controls and how they look like:

Syntax Outcome
// Integer
IntegerProperty brightness = new SimpleIntegerProperty(50);
Setting.of("Brightness", brightness);
// Integer Range
IntegerProperty fontSize = new SimpleIntegerProperty(12);
Setting.of("Font Size", fontSize, 6, 36);
// Double
DoubleProperty scaling = new SimpleDoubleProperty(1);
Setting.of("Scaling", scaling);
// Double Range
DoubleProperty lineSpacing = new SimpleDoubleProperty(1.5);
Setting.of("Line Spacing", lineSpacing, 0, 3, 1);
// Boolean
BooleanProperty nightMode = new SimpleBooleanProperty(true);
Setting.of("Night Mode", nightMode);
// String
StringProperty welcomeText = new SimpleStringProperty("Hello World");
Setting.of("Welcome Text", welcomeText);
// Combobox, Single Selection, with ObservableList
ObservableList resolutionItems = FXCollections.observableArrayList(Arrays.asList(
  "1024x768", "1280x1024", "1440x900", "1920x1080")
);
ObjectProperty resolutionSelection = new SimpleObjectProperty<>("1024x768");
Setting.of("Resolution", resolutionItems, resolutionSelection);
// Combobox, Single Selection, with ListProperty
ListProperty orientationItems = new SimpleListProperty<>(
  FXCollections.observableArrayList(Arrays.asList("Vertical", "Horizontal"))
);
ObjectProperty orientationSelection = new SimpleObjectProperty<>("Vertical");
Setting.of("Orientation", orientationItems, orientationSelection);
// Combobox, Multi Selection
ListProperty favoritesItems = new SimpleListProperty<>(
  FXCollections.observableArrayList(Arrays.asList(
      "eMovie", "Eboda Phot-O-Shop", "Mikesoft Text",
      "Mikesoft Numbers", "Mikesoft Present", "IntelliG"
      )
  )
);
ListProperty favoritesSelection = new SimpleListProperty<>(
  FXCollections.observableArrayList(Arrays.asList(
      "Eboda Phot-O-Shop", "Mikesoft Text"))
);
Setting.of("Favorites", favoritesItems, favoritesSelection);
// Color
ObjectProperty colorProperty = new SimpleObjectProperty<>(Color.PAPAYAWHIP);
Setting.of("Font Color", colorProperty);
// FileChooser / DirectoryChooser
ObjectProperty fileProperty = new SimpleObjectProperty<>();
Setting.of("File", fileProperty, false);     // FileChooser
Setting.of("Directory", fileProperty, true); // DirectoryChooser
// Custom Control
IntegerProperty customControlProperty = new SimpleIntegerProperty(42);
IntegerField customControl = Field.ofIntegerType(customControlProperty).render(
  new IntegerSliderControl(0, 42));
Setting.of("Favorite Number", customControl, customControlProperty);
// Static node
Node staticNode = new Label("This can be your very own placeholder!");
Setting.of(staticNode);

Note: By default, PreferencesFX saves the settings under a key which consists of the breadcrumb to the setting, delimited by # signs. If you want to define your own key to be used for saving, use the method setting.customKey("key")

Localisation

All displayed strings can be internationalized. You can use resource bundles to define different locales and use the key instead of the descriptions. Adding i18n support is simply done by calling the method .i18n() at the end when creating the preferences:

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);

PreferencesFx.of(…)
             .i18n(rbs);

Validation

It is possible to optionally add a Validator to settings. PreferencesFX uses the implementation of FormsFX for the validation. FormsFX offers a wide range of pre-defined validators, but also includes support for custom validators using the CustomValidator.forPredicate() method. The following table lists the supported validators:

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

Team

License

FOSSA Status

Comments
  • Non-existent directories cannot be changed via UI

    Non-existent directories cannot be changed via UI

    Description

    When a user has deleted a directory that formerly existed as a preference, the PreferencesFX dialog prevents the user from choosing a different directory.

    Replicate

    Create a PreferencesFX controller with a file selection option, such as:

    Preferences-000017

    In the figure, the path c:\cygwin\home\Dave used to exist, but no longer exists.

    Click Browse to change the directory.

    Expected

    The file picker dialog appears, allowing the user to choose a different directory. Since the initial directory doesn't exist, the default should be set to something reasonable (such as System.getProperty( "user.home" )).

    Actual

    No dialog appears.

    Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: Folder parameter must be a valid folder
            at javafx.graphics/com.sun.glass.ui.CommonDialogs.convertFolder(Unknown Source)
            at javafx.graphics/com.sun.glass.ui.CommonDialogs.showFolderChooser(Unknown Source)
            at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.showDirectoryChooser(Unknown Source)
            at javafx.graphics/javafx.stage.DirectoryChooser.showDialog(Unknown Source)
            at com.dlsc.preferencesfx.formsfx.view.controls.SimpleChooserControl.lambda$initializeParts$0(SimpleChooserControl.java:143)
    

    Full stack trace is attached.

    preferences-fx.txt

    Work around

    Applications must first verify that each directory exists before allowing PreferencesFX to attempt to change it. This is a brittle work around because users may still delete directories while the application is running, which would require a watch dog on the entire system.

    System

    Using JDK 19 with JavaFX 19 on WIndows 10.

    opened by DaveJarvis 0
  • Table increases by a few pixels after sizing divider

    Table increases by a few pixels after sizing divider

    Replicate

    1. Create a new PreferencesFX dialog with a table, such as:

      preferencesfx-01

    2. Move the slider back and forth until the label for the table switches from having an ellipses (e.g., Pai... in the previous image) back to not having an ellipses (e.g., Pairs).

    3. Click anywhere in the table.

    Expected results

    The table stays the same size. The label does not contain ellipses.

    Actual results

    The table expands by a pixel. The label contains an ellipses.

    preferencesfx-02

    Environment

    $ java --version
    openjdk 19.0.1 2022-10-18
    OpenJDK Runtime Environment (build 19.0.1+11)
    OpenJDK 64-Bit Server VM (build 19.0.1+11, mixed mode, sharing)
    
    implementation 'com.dlsc.preferencesfx:preferencesfx-core:11.11.0'
    
    javafx {
      version = '19'
      modules = ['javafx.controls', 'javafx.swing']
      configuration = 'compileOnly'
    }
    

    Related

    See issues #413 and #430 .

    opened by DaveJarvis 0
  • Custom settings serialization

    Custom settings serialization

    Hi guys,

    I tried to create a custom editor with a custom list of objects but the saving is failed, because the max length of the serialized data is 8*1024. The StorageHandlerImpl did not serialize each item in the list separated, so it handles the whole list.

    Any idea how can I handle this?

    opened by b0c1 1
  • Receving following error while using PreferencesFx

    Receving following error while using PreferencesFx

    Exception in thread "JavaFX Application Thread" java.lang.AbstractMethodError: Receiver class org.kordamp.ikonli.fontawesome.FontAwesomeIkonHandler does not define or inherit an implementation of the resolved method 'abstract java.net.URL getFontResource()' of interface org.kordamp.ikonli.IkonHandler. at org.kordamp.ikonli.javafx.IkonResolver.(IkonResolver.java:42) at org.kordamp.ikonli.javafx.FontIcon.lambda$new$2(FontIcon.java:75) at javafx.base/com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:360) at javafx.base/com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80) at javafx.base/javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:106) at javafx.base/javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:113) at javafx.base/javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:147) at javafx.graphics/javafx.css.StyleableObjectProperty.set(StyleableObjectProperty.java:82) at org.kordamp.ikonli.javafx.FontIcon.setIconCode(FontIcon.java:215) at org.kordamp.ikonli.javafx.FontIcon.(FontIcon.java:96) at com.dlsc.preferencesfx.view.UndoRedoBox.(UndoRedoBox.java:32) at com.dlsc.preferencesfx.PreferencesFx.init(PreferencesFx.java:71) at com.dlsc.preferencesfx.PreferencesFx.(PreferencesFx.java:64) at com.dlsc.preferencesfx.PreferencesFx.(PreferencesFx.java:55) at com.dlsc.preferencesfx.PreferencesFx.of(PreferencesFx.java:102)

    opened by signalarun 0
  •  java.lang.IllegalStateException: org.slf4j.LoggerFactory in failed state

    java.lang.IllegalStateException: org.slf4j.LoggerFactory in failed state

    Hi

    I downloaded your DemoView/StandardExample and pasted them into an app to see PrefFX working. On running the application I get a slf4j exception:

    Caused by: java.lang.IllegalStateException: org.slf4j.LoggerFactory in failed state. Original exception was thrown EARLIER. See also http://www.slf4j.org/codes.html#unsuccessfulInit at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:422) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357) at com.dlsc.preferencesfx.model.Setting.(Setting.java:51) ... 48 more ...

    and a related exception:

    Exception in thread "JavaFX Application Thread" java.lang.NoClassDefFoundError: Could not initialize class com.dlsc.preferencesfx.model.Setting at appPreferences.prefsfx.StandardExample.createPreferences(StandardExample.java:86) ...

    which stems from:

    Setting.of("Orientation", orientationItems, orientationSelection)

    Is there some additional setup required?

    What if I'm using my own logger? Will that interfere the one used by PrefFX?

    Thanks. Graham

    opened by gmseed 0
Releases(v11.11.0)
  • v11.11.0(Sep 21, 2022)

    Changelog

    0dafa10 🏁 Releasing version 11.11.0 4348c8f Merge pull request #434 from VirtualTim/patch-1 c7613c7 Rename areSettingsPending to isContainingChanges b4da982 Merge pull request #435 from VirtualTim/patch-2 726fe92 Merge pull request #433 from leanity/master-11 2cf48f0 Fix links in the PR template f247db2 Add an API to check if any pending settings are pending 28ca8e5 Merge branch 'master-11' of https://github.com/leanity/PreferencesFX into master-11 c79b0be Visibility property didn't work for NodeElement settings. This is now fixed. 6f2976f Merge branch 'dlsc-software-consulting-gmbh:master-11' into master-11 7862c50 Fixes #432. Distance between groups is now implemented through top margins, not bottom margins of previous groups. As a result, distances are also correct when elements or groups are hidden. 4de933f Merge pull request #430 from leanity/master-11 bbeb2e4 Fixes #431 where pseudo classes are not set when controls are initially created which resulted in wrong highlighting of settings that are invalid already when loading. 0062c4e Merge branch 'dlsc-software-consulting-gmbh:master-11' into master-11 7d26674 Fixed issue when both Group and Setting have visibility defined. Group visibility used to overwrite setting visibility. Also prevent CategoryController from getting bigger and bigger when switching combobox content and PreferencesFxView is displayed as a node.

    Source code(tar.gz)
    Source code(zip)
  • v11.10.0(Aug 18, 2022)

    Changelog

    8ed035c 🏁 Releasing version 11.10.0 16d3442 Merge pull request #429 from leanity/master-11 0566950 Cleared warnings, also one from lgtm.com 40e070a Removed dedicated demo for visibility. 25d930c Merge branch 'master-11' of https://github.com/leanity/PreferencesFX into master-11 37993da Fixed issue where spacing was incorrect when elements were hidden. ff5c028 Update documentation of visibility feature df19296 Fixed issue with hiding categories. Also value of VisibilityProperty was not set at creation. e1941a6 Merge branch 'dlsc-software-consulting-gmbh-master-11' into master-11 75265e6 Fixed conflict when merging most recent changes from origin. cbdb10e Added examples for using new visibility feature into extended demo. Added documentation for VisibilityProperty helpers. 6076831 Merge pull request #5 from HaltenTech-Team/master-11 a283c6a Merge pull request #1 from HaltenTech-Team/feat/add-visibility-for-settings e190754 feat: added visibility b39b199 Merge branch 'HaltenTech-Team-master-11' into master-11 a8e20b0 Resolved conflict. Removed entry from changelog (this will be added by owner of library when they include the changes into a release. db5bd32 Merge pull request #5 from HaltenTech-Team/feat/add-elements-visibility af8b7fd feat: added visibility documentation 1098585 Merge pull request #4 from leanity/revert-2-feat/add-elements-visibility 142d203 Revert "feat: added documentation" db9e9c6 Merge pull request #2 from HaltenTech-Team/feat/add-elements-visibility eecc378 feat: added visibility documentation 9afbe5b Merge pull request #4 from HaltenTech-Team/feat/add-elements-visibility d61e804 feat: refactor the way how category show/hide in navigation tree 4fb7eae chore: rename variable with clear name 09d1266 chore: moved invalidate workaround to separate method 1438789 fix: category hide/show in navigation tree ee8a731 feat: added additional category for example ad5a40d feat: refactor visibility for Group solution 5b1aac7 feat: added visibility for Group 864c8b4 chore: simple refactoring of comments and imports 55818d6 style: code style fixes for PR 33a82f5 feat: added visibility paramerts for all types 313da1e feat: added visibility property to SimpleControl 4629050 fix: moved visibility bindings setup to proper place in class 07f401c fix: restore fieldLabel 8348ee1 fix: hide label and adjust space between components 5e85e86 Merge pull request #3 from HaltenTech-Team/feat/add-elements-visibility 8f3077d feat: added factory method for VisibilityProperty 256de6e Merge pull request #1 from HaltenTech-Team/feat/add-elements-visibility 0e2110e feat: added visibility lambda expression 5642b63 feat: added first version of visibility property

    Source code(tar.gz)
    Source code(zip)
  • v11.9.1(Jul 22, 2022)

    Changelog

    9f0d4f6 🏁 Releasing version 11.9.1 7f515e9 Merge pull request #419 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.apache.logging.log4j-log4j-core-2.17.1 e6433cb Merge pull request #417 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.apache.logging.log4j-log4j-api-2.17.1 61c4720 Merge pull request #416 from dlsc-software-consulting-gmbh/dependabot/maven/org.apache.logging.log4j-log4j-core-2.17.1 a8bd1e5 Merge pull request #414 from dlsc-software-consulting-gmbh/dependabot/maven/org.apache.logging.log4j-log4j-slf4j-impl-2.17.1 7a7c4cc Merge pull request #428 from VirtualTim/patch-2 e5d5d5c Merge pull request #425 from VirtualTim/patch-1 fe008c1 Merge pull request #424 from leanity/master-11 84ccb28 Update the demo module-info to fix the Extended Example b97f729 Make Setting constructor protected, so it's possible to extend this class. f4eefac Added example for new password control. a115320 Added SimplePasswordControl by porting it from FormsFX library. 30911cf Bump log4j-api from 2.17.0 to 2.17.1 a53e4d2 Bump log4j-core from 2.17.0 to 2.17.1 df40430 Bump log4j-core from 2.17.0 to 2.17.1 7cf8724 Bump log4j-slf4j-impl from 2.17.0 to 2.17.1

    Source code(tar.gz)
    Source code(zip)
  • v11.9.0(Jan 4, 2022)

    Changelog

    8e2de93 🏁 Releasing version 11.9.0 2efe019 Migrated to new CI pipeline using jreleaser. e93c544 Migrated to new CI pipleline using jreleaser. 258380d Removed travis integration / build. 9b4db0b Fixed gson usage and tests. 4b13103 Merge pull request #361 from dlsc-software-consulting-gmbh/dependabot/maven/org.asciidoctor-asciidoctorj-2.5.2 b9ca2fe Bump asciidoctorj from 2.5.1 to 2.5.2 057556a Merge pull request #377 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.apache.maven.plugins-maven-javadoc-plugin-3.3.1 c423629 Merge pull request #376 from dlsc-software-consulting-gmbh/dependabot/maven/org.apache.maven.plugins-maven-javadoc-plugin-3.3.1 fb4b4be Merge pull request #360 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.asciidoctor-asciidoctor-maven-plugin-2.2.1 f43c030 Merge pull request #359 from dlsc-software-consulting-gmbh/dependabot/maven/org.asciidoctor-asciidoctor-maven-plugin-2.2.1 7fac480 Merge pull request #358 from dlsc-software-consulting-gmbh/dependabot/maven/org.slf4j-slf4j-api-1.7.32 3b9e301 Merge pull request #357 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.slf4j-slf4j-api-1.7.32 54f8107 Merge pull request #354 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.ow2.asm-asm-9.2 14c4a55 Merge pull request #353 from dlsc-software-consulting-gmbh/dependabot/maven/org.ow2.asm-asm-9.2 8af2c2a Merge pull request #352 from rladstaetter/patch-1 c364f92 Merge pull request #386 from dlsc-software-consulting-gmbh/dependabot/maven/com.google.code.gson-gson-2.8.9 02fd6ae Merge pull request #385 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/com.google.code.gson-gson-2.8.9 4f338dd Merge pull request #384 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.openjfx-javafx-web-17.0.1 f2273f4 Merge pull request #383 from dlsc-software-consulting-gmbh/dependabot/maven/org.openjfx-javafx-web-17.0.1 4548208 Merge pull request #412 from dlsc-software-consulting-gmbh/dependabot/maven/org.mockito-mockito-core-4.2.0 d2d8dd6 Merge pull request #405 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.mockito-mockito-core-4.2.0 05761e7 Bump mockito-core from 4.1.0 to 4.2.0 5405885 Merge pull request #390 from dlsc-software-consulting-gmbh/dependabot/maven/org.controlsfx-controlsfx-11.1.1 08f0311 Merge pull request #391 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.controlsfx-controlsfx-11.1.1 46ec633 Merge pull request #408 from dlsc-software-consulting-gmbh/dependabot/maven/org.apache.logging.log4j-log4j-slf4j-impl-2.17.0 3b2a77e Merge pull request #410 from dlsc-software-consulting-gmbh/dependabot/maven/org.apache.logging.log4j-log4j-core-2.17.0 9160b7f Merge pull request #407 from dlsc-software-consulting-gmbh/dependabot/maven/preferencesfx-demo/org.apache.logging.log4j-log4j-core-2.17.0 00567fe Merge pull request #409 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.apache.logging.log4j-log4j-core-2.17.0 34b73f5 Merge pull request #411 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.apache.logging.log4j-log4j-slf4j-impl-2.17.0 854a884 Bump log4j-slf4j-impl from 2.15.0 to 2.17.0 96a45f4 Bump log4j-core from 2.15.0 to 2.17.0 9f45eaf Bump log4j-core from 2.15.0 to 2.17.0 313c634 Bump log4j-slf4j-impl from 2.15.0 to 2.17.0 0721ef8 Merge pull request #406 from dlsc-software-consulting-gmbh/dependabot/maven/preferencesfx-demo/org.apache.logging.log4j-log4j-api-2.17.0 d22bdec Bump log4j-core from 2.15.0 to 2.17.0 in /preferencesfx-demo 60277dd Bump log4j-api from 2.15.0 to 2.17.0 in /preferencesfx-demo 9d1df62 Bump mockito-core from 4.1.0 to 4.2.0 f038cf1 Merge pull request #388 from dlsc-software-consulting-gmbh/dependabot/maven/org.mockito-mockito-core-4.1.0 3f95630 Merge pull request #396 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.apache.logging.log4j-log4j-slf4j-impl-2.15.0 a7cdaee Merge pull request #395 from dlsc-software-consulting-gmbh/dependabot/maven/org.apache.logging.log4j-log4j-api-2.15.0 c5f35d9 Merge pull request #394 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.apache.logging.log4j-log4j-api-2.15.0 1ab3e5e Merge pull request #393 from dlsc-software-consulting-gmbh/dependabot/maven/preferencesfx-demo/org.apache.logging.log4j-log4j-core-2.15.0 6fdca24 Merge pull request #392 from dlsc-software-consulting-gmbh/dependabot/maven/preferencesfx-demo/org.apache.logging.log4j-log4j-api-2.15.0 69da636 Bump log4j-slf4j-impl from 2.14.1 to 2.15.0 ccfdace Bump log4j-api from 2.14.1 to 2.15.0 463ebae Bump log4j-api from 2.14.1 to 2.15.0 b8a75ae Bump log4j-core from 2.14.1 to 2.15.0 in /preferencesfx-demo f13c32c Bump log4j-api from 2.14.1 to 2.15.0 in /preferencesfx-demo 8cfa50c Bump controlsfx from 11.1.0 to 11.1.1 f6939d7 Bump controlsfx from 11.1.0 to 11.1.1 e0247bc Bump mockito-core from 3.11.1 to 4.1.0 6bfc5eb Bump gson from 2.8.7 to 2.8.9 e5e264e Bump gson from 2.8.7 to 2.8.9 370abcb Bump javafx-web from 16 to 17.0.1 dcebc01 Bump javafx-web from 16 to 17.0.1 8680594 Bump maven-javadoc-plugin from 3.3.0 to 3.3.1 ea6da7d Bump maven-javadoc-plugin from 3.3.0 to 3.3.1 fc3b1fb Bump asciidoctor-maven-plugin from 2.1.0 to 2.2.1 e7f2b0f Bump asciidoctor-maven-plugin from 2.1.0 to 2.2.1 6114909 Bump slf4j-api from 1.7.30 to 1.7.32 2a9ec45 Bump slf4j-api from 1.7.30 to 1.7.32 2b0c356 Bump asm from 9.1 to 9.2 ae5d50d Bump asm from 9.1 to 9.2 83a5748 Updates Readme.md 9e46d30 Merge pull request #347 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.apache.maven.plugins-maven-surefire-plugin-3.0.0-M5 0154ba9 Merge pull request #346 from dlsc-software-consulting-gmbh/dependabot/maven/org.slf4j-slf4j-api-1.7.30 90bfee9 Merge pull request #345 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.apache.maven.plugins-maven-javadoc-plugin-3.3.0 3512a3c Merge pull request #343 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.apache.logging.log4j-log4j-core-2.14.1 b761d62 Merge pull request #342 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.slf4j-slf4j-api-1.7.30 29122cd Merge pull request #341 from dlsc-software-consulting-gmbh/dependabot/maven/org.apache.maven.plugins-maven-source-plugin-3.2.1 3458118 Merge pull request #340 from dlsc-software-consulting-gmbh/dependabot/maven/org.apache.maven.plugins-maven-surefire-plugin-3.0.0-M5 75a66f0 Merge pull request #339 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.apache.maven.plugins-maven-source-plugin-3.2.1 89736c6 Merge pull request #305 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.ow2.asm-asm-9.1 36c43bc Merge pull request #338 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.mockito-mockito-core-3.11.1 a6270a4 Merge pull request #337 from dlsc-software-consulting-gmbh/dependabot/maven/org.mockito-mockito-core-3.11.1 8e5b20d Bump maven-surefire-plugin from 3.0.0-M3 to 3.0.0-M5 7f573d8 Merge pull request #333 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/com.google.code.gson-gson-2.8.7 26870b6 Bump slf4j-api from 1.7.28 to 1.7.30 c91e08a Merge pull request #332 from dlsc-software-consulting-gmbh/dependabot/maven/com.google.code.gson-gson-2.8.7 47860e4 Bump maven-javadoc-plugin from 3.2.0 to 3.3.0 4d21cd6 Bump log4j-core from 2.12.1 to 2.14.1 77b4ec7 Bump slf4j-api from 1.7.28 to 1.7.30 a4f2ead Bump maven-source-plugin from 3.1.0 to 3.2.1 f824cf9 Merge pull request #331 from dlsc-software-consulting-gmbh/dependabot/maven/org.apache.maven.plugins-maven-javadoc-plugin-3.3.0 43bebe3 Bump maven-surefire-plugin from 3.0.0-M3 to 3.0.0-M5 d7f617a Bump maven-source-plugin from 3.1.0 to 3.2.1 5672d6e Merge pull request #330 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.apache.maven.plugins-maven-javadoc-plugin-3.3.0 8ebedf3 Merge pull request #327 from dlsc-software-consulting-gmbh/dependabot/maven/org.asciidoctor-asciidoctorj-2.5.1 7cc844a Merge pull request #326 from dlsc-software-consulting-gmbh/dependabot/add-v2-config-file f8207c1 Merge pull request #324 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/junit-junit-4.13.2 874a915 Bump asciidoctorj from 1.6.2 to 2.5.1 14c0e26 Merge pull request #323 from dlsc-software-consulting-gmbh/dependabot/maven/junit-junit-4.13.2 603bd9d Merge pull request #316 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.apache.logging.log4j-log4j-slf4j-impl-2.14.1 10ab30c Merge pull request #311 from dlsc-software-consulting-gmbh/dependabot/maven/org.controlsfx-controlsfx-11.1.0 027acab Merge pull request #310 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.controlsfx-controlsfx-11.1.0 6da5e84 Merge pull request #306 from dlsc-software-consulting-gmbh/dependabot/maven/org.ow2.asm-asm-9.1 1bbd5ee Merge pull request #273 from dlsc-software-consulting-gmbh/dependabot/maven/preferencesfx/junit-junit-4.13.1 4312f8a Merge pull request #262 from dlsc-software-consulting-gmbh/dependabot/maven/master-11/org.asciidoctor-asciidoctor-maven-plugin-2.1.0 0ad1156 Merge pull request #256 from dlsc-software-consulting-gmbh/dependabot/maven/org.asciidoctor-asciidoctor-maven-plugin-2.1.0 e8e4666 Merge pull request #336 from JellevanAbbema/master-11 3d9223b removed a dot in the pom that should not be there 236e185 Bump mockito-core from 3.9.0 to 3.11.1 719115e Bump mockito-core from 3.9.0 to 3.11.1 8fa7b03 Added getStyleSheets Fucntion 985c113 Bump gson from 2.8.5 to 2.8.7 132ad35 Bump gson from 2.8.5 to 2.8.7 9ef9a39 Bump maven-javadoc-plugin from 3.2.0 to 3.3.0 dcb87da Bump maven-javadoc-plugin from 3.2.0 to 3.3.0 2136da5 Upgrade to GitHub-native Dependabot 363fffc Bump junit from 4.13.1 to 4.13.2 b733d93 Bump junit from 4.13.1 to 4.13.2 3d27c6e Bump log4j-slf4j-impl from 2.12.1 to 2.14.1 2d66dd1 Bump controlsfx from 11.0.0 to 11.1.0 a75bdea Bump controlsfx from 11.0.0 to 11.1.0 2c082a2 Bump asm from 7.2 to 9.1 82f40b5 Bump asm from 7.2 to 9.1 a655cb3 Bump junit from 4.12 to 4.13.1 in /preferencesfx 79f8aab Bump asciidoctor-maven-plugin from 1.6.0 to 2.1.0 ebfb9be Bump asciidoctor-maven-plugin from 1.6.0 to 2.1.0

    Source code(tar.gz)
    Source code(zip)
  • v11.3.0(Jul 23, 2019)

    Updated dependencies. Removed dependency to ControlsFX snapshot repository. Fixed bug that prevented the dialog from opening a second time (Java 11 only). Updated README, made it version dependent. Started using slf4j instead of log4j.

    Source code(tar.gz)
    Source code(zip)
  • v8.3.0(Jul 23, 2019)

    Updated dependencies. Removed dependency to ControlsFX snapshot repository. Fixed bug that prevented the dialog from opening a second time (Java 11 only). Updated README, made it version dependent. Started using slf4j instead of log4j.

    Source code(tar.gz)
    Source code(zip)
  • v11.1.0(Sep 20, 2018)

  • v10.1.0(Sep 20, 2018)

  • v2.0.0(Apr 27, 2018)

Owner
DLSC Software & Consulting GmbH
DLSC Software & Consulting GmbH
Lib-Tile is a multi Maven project written in JavaFX and NetBeans IDE 8 and provides the functionalities to use and handle easily Tiles in your JavaFX application.

Lib-Tile Intention Lib-Tile is a multi Maven project written in JavaFX and NetBeans IDE and provides the functionalities to use and handle easily Tile

Peter Rogge 13 Apr 13, 2022
A Java framework for creating sophisticated calendar views (JavaFX 8, 9, 10, and 11)

CalendarFX A Java framework for creating sophisticated calendar views based on JavaFX. A detailed developer manual can be found online: CalendarFX 8 D

DLSC Software & Consulting GmbH 660 Jan 6, 2023
An Android library that allows you to easily create applications with slide-in menus.

An Android library that allows you to easily create applications with slide-in menus. You may use it in your Android apps provided that you cite this project and include the license in your app. Thanks!

Jeremy Feinstein 11.1k Jan 4, 2023
A library for creating and editing graph-like diagrams in JavaFX.

Graph Editor A library for creating and editing graph-like diagrams in JavaFX. This project is a fork of tesis-dynaware/graph-editor 1.3.1, which is n

Steffen 125 Jan 1, 2023
Tool for creating custom GUIs using packets.

Tool for creating custom GUIs using packets.

Geo3gamer 0 Feb 14, 2022
Desktop/Mobile JavaFX application framework

Basilisk is desktop/mobile application development platform for the JVM. Inspired by Griffon, Basilisk leverages JavaFX and JavafXPorts to bring the s

Basilisk 55 Feb 10, 2022
an Application Framework for implementing the MVVM Pattern with JavaFX

mvvmFX is an application framework which provides you necessary components to implement the MVVM pattern with JavaFX. MVVM is the enhanced version of

Alexander Casall 438 Dec 28, 2022
An image annotation desktop-application written in Java using the JavaFX application platform.

This is an image annotation desktop-application written in Java using the JavaFX application platform. It allows you to create bounding box annotations using rectangular and polygonal shapes. Annotations can be imported and saved from/to JSON files, Pascal VOC format XML-files or YOLO format TXT-files.

Markus Fleischhacker 31 Dec 4, 2022
Docking framework for JavaFX platform

Docking framework for JavaFX platform AnchorFX is a gratis and open source library for JavaFX to create graphical interfaces with docking features Anc

Alessio Vinerbi 197 Oct 15, 2022
A JavaFX UI framework to create fully customized undecorated windows

CustomStage A JavaFX undecorated stage which can fully be customized Donations If this project is helpful to you and love my work and feel like showin

Oshan Mendis 186 Jan 6, 2023
Create your own auto-update framework

Read the documentation, explore the JavaDoc, or see it in action Create a framework: design the environment and lifecycle (—bootstrap) to make your ow

null 698 Dec 29, 2022
Lightweight JavaFX Framework for Kotlin

TornadoFX JavaFX Framework for Kotlin Important: TornadoFX is not yet compatible with Java 9/10 Oracle is intending to decouple JavaFX from the JDK. W

Edvin Syse 3.6k Dec 29, 2022
A lightweight RCP framework for JavaFX applications.

WorkbenchFX The one and only framework to build large JavaFX Applications! Maven To use this framework as part of your Maven build simply add the foll

DLSC Software & Consulting GmbH 471 Jan 8, 2023
😉PrettyZoo is a GUI for Zookeeper created by JavaFX and Apache Curator Framework.

?? Pretty nice Zookeeper GUI, Support Win / Mac / Linux Platform

vran 2.4k Jan 5, 2023
Ghidra is a software reverse engineering (SRE) framework

Ghidra Software Reverse Engineering Framework Ghidra is a software reverse engineering (SRE) framework created and maintained by the National Security

National Security Agency 36.5k Dec 28, 2022
A GUI-based file manager based on a Java file management and I/O framework using object-oriented programming ideas.

FileManager A GUI-based file manager based on a Java file management and I/O framework using object-oriented programming ideas. Enables folder creatio

Zongyu Wu 4 Feb 7, 2022
JavaFX micro-framework that follows MVVM Pattern with Google Guice dependency Injection

ReactiveDeskFX (JavaFX and Google Guice MVVM Pattern micro-framework) JavaFX micro-framework to develop very fast JavaFX components with minimal code

TangoraBox 3 Jan 9, 2022
A simple JavaFX application to load, save and edit a CSV file and provide a JSON configuration for columns to check the values in the columns.

SmartCSV.fx Description A simple JavaFX application to load, save and edit a CSV file and provide a JSON Table Schema for columns to check the values

Andreas Billmann 74 Oct 24, 2022
Android Resource Manager application to manage and analysis your app resources with many features like image resize, Color, Dimens and code Analysis

AndroidResourceManager Cross-Platform tools to manage your resources as an Android Developer, AndroidResourceManager - ARM provide five main services

Amr Hesham 26 Nov 16, 2022