VirtualizedFX
VirtualizedFX copied to clipboard
VirtualizedFX
VirtualizedFX is an open source Java library which provides virtualized components to display huge amounts of data
without hurting performance by rendering only a portion of it
Explore the wiki »
Report Bug
·
Request Feature
Table of Contents
- About the Project
- Getting Started
- Build
- Usage
- Gradle
- Maven
- Documentation
- Contributing
- License
- Contact
- Donation
- Supporters
About The Project
In UI there is a little-known concept called 'virtualization' which essentially is a technique to render only a portion
of elements generated from a larger number of data items. Typically used to display huge collections of items in UI
containers which can vary from lists, to grids, tables, trees, etc.
Most of the time the algorithm revolves around the concept of 'fixed size' for all the elements, to predict exactly how
many items and UI nodes to create and show, how many pixels we need to display all the content and more. This property
not only makes things easier to compute but also a lot faster.
As of today, VirtualizedFX only offers solutions based on such concept, but I'd like to explore 'variable size' in the future.
Some articles on the matter:
[1],
[2],
[3],
[4].
VirtualizedFX is not the first nor the second product that offers UI virtualization.
JavaFX has its own implementation, called VirtualFlow, which is an undocumented big blob class written following the
Spaghetti Code anti-pattern.
Other frameworks I did try had more or less the same issues, bad documentation, bad modularity, but also a high memory
footprint, old/unmaintained unnecessary dependencies.
Unlike others, VirtualizedFX is founded on a series of principles that make it more appealing and performant. The code base is well documented, well organized and fairly simple, which makes it easier to maintain and understand. That said, VirtualizedFX still brings a couple of dependencies with it to make the development easier: MFXCore, MFXEffects, MFXResources.
Getting Started
In this section you can learn what do you need to use my library in your project.
Note: the new version of VirtualizedFX, as the versioning 21.x.x may suggest, requires at least JDK 21.
Build
To build VirtualizedFX, execute the following command:
gradlew build
Usage
Gradle
repositories {
mavenCentral()
}
dependencies {
implementation 'io.github.palexdev:virtualizedfx:21.5.0'
}
Maven
<dependency>
<groupId>io.github.palexdev</groupId>
<artifactId>virtualizedfx</artifactId>
<version>21.5.0</version>
</dependency>
Documentation
You can read VirtualizedFX's documentation at javadoc.io
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 - [email protected]
Discussions
Project Link: https://github.com/palexdev/VirtualizedFX
Donation
VirtualizedFX is complex library, because it revolves around complex concept which is UI virtualization.
Still, by following strict rules, by documenting everything and testing it properly, I tried to make it as easy to
use and understand as possible. With the recent rewrite I can finally say I'm proud of my product, and I'm more than happy
to share it to you, make good use of it!
The issue I have always had ever since I started writing this library, is the insane amount of time it takes to complete
even a single virtualized component. More than once I had to write almost all day long to get some results, and it was
really stressful.
So, if you are using VirtualizedFX in your projects and feel like it, you can show your appreciation with a donation,
even a small one is greatly appreciated.
You can do it on KoFi or with PayPal
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 reason you don't want to be listed here)