Skip to content

palexdev/VirtualizedFX

Repository files navigation

HitCount GitHub Workflow Status Sonatype Nexus (Releases) javadoc GitHub issues GitHub pull requests GitHub


Logo

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

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.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

License

Distributed under the GNU LGPLv3 License. See LICENSE for more information.

Contact

Alex - alessandro.parisi406@gmail.com

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)

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages