
Disclaimer: I recently switched to Linux for production because I was tired of Bugdows but because they use different line endings IntelliJ is showing me that all files are changed, also the ones with identical content. I re-normalized the project and added a .gitattributes file. I'm not sure how GitHub will visualize this commit, if it's messed sorry in advance... but don't worry, as always all changes are listed here 😉 ⬆️ Upgraded VirtualizedFX to version 11.2.1 Demo 🚧 Temporarily "disabled" or non-functional some showcases ✅ Added new tests MaterialFX Beans Package ✨ Added convenience properties for Java's functions ✨ Added convenience property to represent a NumberRange ✨ Added many new beans ♻️ NumberRange: implemented hashCode, equals and toString, added two new methods to convert a range on integers to a List or a Set 🚚 Renamed RipplePosition ti PositionBean and moved to this package Collections Package ✨ TransformableList is a new kind of ObservableList that combines JavaFX's FilteredList and SortedList functionalities into one ✨ TransformableListWrapper is an ObservableList which wraps both the source list and the transformable list in the same class. This makes using TransformableLists less verbose as modifications to the source list can be made directly from this wrapper Controls Package 🔥 Removed AbstractMFXNotificationPane 🔥 Removed MFXNotification 🔥 Removed SimpleMFXNotificationPane ✨ Added a new cell to contain notifications ✨ FilterPane, a new control that allows to build Predicate filters interactively ✨ MFXNotificationCenter, a new control that allows to display multiple notifications. It is basically an icon that opens a popup which contains not only the list of notifications but also controls to manage them ✨ MFXPopup, extension of PopupControl to easily set the popup's content and position it by using HPos and VPos enumerations. It also introduces a hover functionality ✨ MFXSimpleNotification, a simple implementation of INotification Effects Package ✨ ConsumerTransition, an implementation of Transition that uses a consumer to perform some action when the interpolate method is called ✨ Interpolators, a new enumerator that offers some new interpolators for JavaFX's animations Enums Package ♻️ Moved all MaterialFX enumerators to this top level package ✨ ChainMode, a new enumerator mainly used by PredicateUtils to chain two predicates ✨ NotificationCounterStyle, a new enumerator to specify MFXNotificationCenter's counter style ✨ NotificationPos, a new enumerator to specify at which position a notification system should place the notification ✨ NotificationState, a new enumerator to represent the read state of a notification Factories Package ♻️ Moved all MaterialFX factories to this top level package ✨ InsetsFactory, a new factory tp build JavaFX's Insets objects Filter Package 💥 The filter API has been completely remade and now it's super flexible, super useful, super amazin haha. I won't describe it here as there are a LOT of new classes and concepts to be described so I recommend you to read AbstractFilter, FilterBean and BiPredicateBean documentations, usage examples can be also found in the demo (not yet at time of writing) and in the documentation of MFXFilterPane 🚧 MFXFilterDialog has been completely commented, will be reworked for the new API Font Package ✨ Added new resources Notifications Package 💥 The notification API has been completely remade. Now there are to notification systems, one is very similar to the old one but it is limited to one notification at a time at a given position. This restriction helper to keep the system simple and efficient. To show multiple notifications at one time I recommend the usage of MFXNotificationCenterSystem which uses a MFXNotificationCenter to show the notifications. Or, you could implement you own notification system since the notification API now offers some base classes to build on top. AbstractMFXNotificationSystem and INotificationSystem specify the base features all notification systems should have, INotification specifies the base features all notifications should have Skin Package No notable change aside from new skins for the new controls and minor changes due to classes renamed/moved Utils Package ✨ FunctionalStringConverter, a functional alternative to JavaFX's StringConverter ✨ ReusableScheduledExecutor, a wrapper class to make a ScheduledExecutorService reusable. To stop/restart a ScheduledExecutorService it's needed to keep a reference to the ScheduledFuture task but this often result in boilerplate code, this wrapper fixes this ✨ EnumStringConverter, an implementation of JavaFX's StringConverter to work with enumerators ✨ Added a new method to ExecutionUtils ✨ FXCollectors, a class that contains some new collectors for JavaFX's observable collections ✨ PredicateUtils, utils for Predicates ✨ StringUtils, added a new method to convert an elapsed time in seconds to a String ♻️ AnimationUtils, added some new methods to PauseTransitionBuilder and KeyFrames classes 🐛 ExceptionUtils, fixed getStackTraceString method as StringWriters are not reusable Resources ✨ Added new CSS files for new controls ♻️ MFXColors.css, added a new color Signed-off-by: Alessadro Parisi <alessandro.parisi406@gmail.com> Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
9.6 KiB
Executable File
MaterialFX
MaterialFX is an open source Java library which provides material components for JavaFX
Explore the wiki »
Download Latest Demo
·
Report Bug
·
Request Feature
Table of Contents
- About the Project and History of JavaFX
- Some GIFs
- Getting Started
- Roadmap
- Contributing
- License
- Contact
- Donation
- Supporters
About The Project and History of JavaFX
JavaFX is a software platform intended to replace Swing in creating and delivering rich client applications that operate consistently across diverse platforms. With the release of JDK 11 in 2018, Oracle has made JavaFX part of the OpenJDK under the OpenJFX project in order to increase the pace of its development.
Key features:
- FXML and SceneBuilder, A designer can code in FXML or use JavaFX Scene Builder to interactively design the graphical user interface (GUI). Scene Builder generates FXML markup that can be ported to an IDE where a developer can add the business logic.
- Built-in UI controls and CSS, JavaFX provides all the major UI controls required to develop a full-featured application. Components can be skinned with standard Web technologies such as CSS.
- Self-contained application deployment model. Self-contained application packages have all the application resources and a private copy of the Java and JavaFX runtimes. They are distributed as native installable packages and provide the same installation and launch experience as native applications for that operating system. JavaFX is a software platform for creating and delivering desktop applications, as well as rich Internet applications (RIAs) that can run across a wide variety of devices.
Over the years the way of creating GUIs has often changed and JavaFX default appearance is still pretty much the same. That's where this project comes in. The aim of my project is to bring components which follow as much as possible the Google's material design guidelines to JavaFX. The second purpose is to provide a successor to the already available JFoenix library, which is a bit old and has a lot of issues.
In recent months the project has evolved a lot, to the point that it is no longer a simple substitute. To date MaterialFX offers not only restyled controls, but also: new and unique controls such as the Stepper, controls completely redone from scratch such as ComboBoxes or TableViews (and many others), and many utilities for JavaFX and Java (NodeUtils, ColorUtils, StringUtils ...).
Preview GIFs
Imgur Link: Gallery
Buttons

CheckBoxes

ComboBoxes

DatePickers

Dialogs

Labels

ListViews

Notifications

ProgressBars

ProgressSpinners

RadioButtons

ScrollPanes

Sliders

Stepper

TableViews

TextFields

Toggles

FontResources

Getting Started
In this section you can learn what do you need to use my library in your project or see a preview/demo which I'm planning to release as runtime images here on github.
Build
To build MaterialFX, execute the following command:
gradlew build
To run the main demo, execute the following command:
gradlew run
NOTE : MaterialFX requires Java 11 and above.
Usage
Gradle
repositories {
mavenCentral()
}
dependencies {
implementation 'io.github.palexdev:materialfx:11.12.0'
}
Maven
<dependency>
<groupId>io.github.palexdev</groupId>
<artifactId>materialfx</artifactId>
<version>11.12.0</version>
</dependency>
Roadmap
See the open issues for a list of proposed features (and known issues).
See the ROADMAP for a list of implemented and upcoming features.
Contributing
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
License
Distributed under the GNU LGPLv3 License. See LICENSE
for more information.
Contact
Alex - alessandro.parisi406@gmail.com
Project Link: https://github.com/palexdev/MaterialFX
Donation
Ever since I was a kid I have always liked programming, I find it interesting and often funny too, however it can also
be a difficult and stressful job at times. This is my first public project, and I'm dedicating a lot of time to it. This
is an open source library of course and everyone can use it for free, but if you feel like it you can make a small
donation here.
Supporters:
(If you want your github page to be linked here and you didn't specify your username in the donation, feel free to contact me by email and tell me. Also contact me if for some some reason you don't want to be listed here)
- Alex Hawk
- Yiding He
- Alaa Abu Zidan
- Ultraviolet-Ninja
- Your name can be here by supporting me at this link, Support
Thank you very very much to all supporters, to all people who contribute to the project, to all people that thanked me, you really made my day